当前位置: 首页 > article >正文

OpenCV 滑动条调整图像对比度和亮度

一、知识点
1、int createTrackbar(const String & trackbarname, const String & winname, int * value, int count, TrackbarCallback onChange = 0, void * userdata = 0);
  (1)、创建一个滑动条并将其附在指定窗口上。
  (2)、参数说明:
      trackbarname: 创建的滑动条显示名称。
      winname: 包含滑动条的窗口名称。
      value: 将由滑动条更改的整数值的指针。
      count: 滑动条的最大位置。
      onChange: 回调函数,每次滑块改变位置时会调用此函数。 函数原型void Foo(int, void *),第一个参数是滑动条位置,第二个参数是用户数据。 如果为nullptr,则不会调用回调函数,但是value仍然自动更新。
      userdata: 用户数据,传递给回调函数。
      
2、void addWeighted(InputArray src1, double alpha, InputArray src2, double beta, double gamma, OutputArray dst, int dtype = -1);
  (1)、计算两个数组的加权和。 在多通道情况下,每个通道都是独立处理的。
  (2)、算法代码: dst = src1 * alpha + src2 * beta + gamma;
  (3)、参数说明:
      src1: 第一个输入数组。
      alpha: 第一个数组元素的权重。
      src2: 第二个输入数组,和src1大小和通道数相同。
      beta: 第二个数组元素权重。
      gamma: 标量,会添加到总和中。
      dst: 输出数组。
      dtype: 输出数组的可选深度。 当两个输入数组具有相同的深度时,dtype可以设置为-1,这相当于src1.depth()。
  (4)、src1 * alpha可以改变对比度,比如原先2个值为2、4,相差2,分别乘以2后为4、8,相差4,差值变大。
  (5)、gamma可以改变亮度,总和中每个像素的每个通道值都会加上gamma。
  
      
      
二、示例代码: 滑动条调整图像对比度和亮度

#include <iostream>
#include <opencv2/opencv.hpp>void onContrast(int value, void * pSrc)
{cv::Mat src = *((cv::Mat *)pSrc);cv::Mat temp = cv::Mat::zeros(src.size(), CV_8UC3);cv::Mat dst;double contrast = value / 50.0;cv::addWeighted(src, contrast, temp, 0.0, 0.0, dst);cv::imshow("对比度和亮度调整", dst);
}void onLightness(int value, void * pSrc)
{cv::Mat src = *((cv::Mat *)pSrc);cv::Mat temp = cv::Mat::zeros(src.size(), CV_8UC3);cv::Mat dst;cv::addWeighted(src, 1.0, temp, 0.0, value, dst);cv::imshow("对比度和亮度调整", dst);
}int main()
{cv::Mat src = cv::imread("../images/8.png");if (src.empty()){std::cout << "load src image error..." << std::endl;return -1;}cv::imshow("原始图像", src);cv::namedWindow("对比度和亮度调整", cv::WINDOW_AUTOSIZE);int contrastValue = 50;cv::createTrackbar("对比度", "对比度和亮度调整", &contrastValue, 100, onContrast, &src);int lightnessValue = 50;cv::createTrackbar("亮度", "对比度和亮度调整", &lightnessValue, 100, onLightness, &src);cv::waitKey(0);return 0;
}

http://www.lryc.cn/news/2404565.html

相关文章:

  • 船舶事故海上搜救VR情景演练全场景 “复刻”,沉浸式救援体验​
  • 使用Caddy在Ubuntu 22.04上配置HTTPS反向代理
  • 无人机目标检测与语义分割数据集(猫脸码客)
  • Web设计之登录网页源码分享,PHP数据库连接,可一键运行!
  • Cursor + Claude 4:微信小程序流量主变现开发实战案例
  • ㊗️高考加油
  • Redis Key过期策略
  • 【C/C++】实现固定地址函数调用
  • 多模态大语言模型arxiv论文略读(109)
  • 性能优化笔记
  • bat批量去掉本文件夹中的文件扩展名
  • 基于ROS2,撰写python脚本,根据给定的舵-桨动力学模型实现动力学更新
  • Scrapy爬虫教程(新手)
  • 数据可视化大屏案例落地实战指南:捷码平台7天交付方法论
  • 第五篇:Go 并发模型全解析——Channel、Goroutine
  • 锁的艺术:深入浅出讲解乐观锁与悲观锁
  • 在网页加载时自动运行js的方法(2025最新)
  • 在Windows下编译出llama_cpp_python的DLL后,在虚拟环境中使用方法
  • CSS radial-gradient函数详解
  • n8n 自动化平台 Docker 部署教程(附 PostgreSQL 与更新指南)
  • 关于datetime获取时间的问题
  • 前端面试五之vue2基础
  • 使用python实现奔跑的线条效果
  • Oracle 审计参数:AUDIT_TRAIL 和 AUDIT_SYS_OPERATIONS
  • Android LinearLayout、FrameLayout、RelativeLayout、ConstraintLayout大混战
  • Unity版本使用情况统计(更新至2025年5月)
  • GPUCUDA 发展编年史:从 3D 渲染到 AI 大模型时代(上)
  • 人机融合智能 | 可穿戴计算设备的多模态交互
  • Impromptu VLA:用于驾驶视觉-语言-动作模型的开放权重和开放数据
  • AI智能体,为美业后端供应链注入“智慧因子”(4/6)