OpenCV 滑动条调整图像亮度

发布于:2025-06-04 ⋅ 阅读:(20) ⋅ 点赞:(0)

一、知识点
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: 用户数据,传递给回调函数。


二、示例代码: 通过滑动条来调整图像亮度

#include <iostream>
#include <opencv2/opencv.hpp>


void onTrackAdd(int value, void * pSrc)
{
	cv::Mat src = ((cv::Mat *)pSrc)->clone();

	cv::Mat temp = cv::Mat::zeros(src.size(), CV_8UC3);
	temp = cv::Scalar(value, value, value);

	cv::Mat dst;
	cv::add(src, temp, dst);
	cv::imshow("亮度增加", dst);
}


void onTrackSub(int value, void * pSrc)
{
	cv::Mat src = ((cv::Mat *)pSrc)->clone();

	cv::Mat temp = cv::Mat::zeros(src.size(), CV_8UC3);
	temp = cv::Scalar(value, value, value);

	cv::Mat dst;
	cv::subtract(src, temp, 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);

	int valueAdd = 50;
	cv::namedWindow("亮度增加", cv::WINDOW_AUTOSIZE);
	cv::createTrackbar("亮度+", "亮度增加", &valueAdd, 100, onTrackAdd, &src);

	int valueSub = 50;
	cv::namedWindow("亮度减少", cv::WINDOW_AUTOSIZE);
	cv::createTrackbar("亮度-", "亮度减少", &valueSub, 100, onTrackSub, &src);

	cv::waitKey(0);
	return 0;
}


网站公告

今日签到

点亮在社区的每一天
去签到