opencv对比度调节滑条回调函数
时间: 2023-11-11 22:06:36 浏览: 97
opencv 滑动条设置
3星 · 编辑精心推荐
在使用OpenCV进行图像处理时,我们经常需要调整图像的对比度。可以使用cv::Mat的convertTo()函数来实现对比度调节,但是如果需要实时调节对比度,可以使用滑条回调函数来实现。
下面是一个简单的示例代码,演示了如何使用滑条回调函数来实现对比度调节:
```c++
#include <opencv2/opencv.hpp>
#include <iostream>
using namespace cv;
using namespace std;
int g_contrast_value = 50; // 对比度初始值
int g_brightness_value = 50; // 亮度初始值
Mat g_srcImage, g_dstImage;
// 对比度和亮度调节函数
void onContrastAndBright(int, void*)
{
// 计算对比度和亮度值
int contrast_value = g_contrast_value - 50;
double brightness_value = g_brightness_value - 50;
// 计算缩放比例
double scale = pow(2, contrast_value / 50.0);
// 计算像素值偏移量
double delta = brightness_value * 255 / 100.0;
// 对图像进行对比度和亮度调节
g_srcImage.convertTo(g_dstImage, -1, scale, delta);
// 显示调整后的图像
imshow("dstImage", g_dstImage);
}
int main()
{
// 读取图像
g_srcImage = imread("test.jpg");
// 创建窗口
namedWindow("srcImage", WINDOW_NORMAL);
namedWindow("dstImage", WINDOW_NORMAL);
// 创建滑条
createTrackbar("Contrast", "dstImage", &g_contrast_value, 100, onContrastAndBright);
createTrackbar("Brightness", "dstImage", &g_brightness_value, 100, onContrastAndBright);
// 初始化图像
onContrastAndBright(g_contrast_value, 0);
// 显示原始图像
imshow("srcImage", g_srcImage);
// 等待按键
waitKey();
return 0;
}
```
在这个示例代码中,我们首先读取了一张图像,然后创建了两个窗口,一个用于显示原始图像,一个用于显示调整后的图像。接着,我们创建了两个滑条,一个用于调节对比度,一个用于调节亮度。每当滑条的值发生变化时,就会调用onContrastAndBright()函数进行对比度和亮度调节。最后,我们显示了原始图像,并等待按键。
阅读全文