createTrackbar
addWeighted
createTrackbar函数
createTrackbar
(
const string& trackbarname,
const string& winname,
int* value,
int count,
TrackbarCallback onChange = 0,
void* userdata = 0
);
- 形式参数一、trackbarname:滑动空间的名称;
- 形式参数二、winname:滑动空间用于依附的图像窗口的名称;
- 形式参数三、value:初始化阈值;注意是指针数据
- 形式参数四、count:滑动控件的刻度范围;
- 形式参数五、TrackbarCallback是回调函数,其定义相当于:typedef void (CV_CDECL *TrackbarCallback)(int pos, void* userdata);
addWeighted函数
void cvAddWeighted(
const CvArr* src1,
double alpha,
const CvArr* src2,
double beta,
double gamma,
CvArr* dst );
- 参数1:src1,第一个原数组
- 参数2:alpha,第一个数组元素权重
- 参数3:src2第二个原数组
- 参数4:beta,第二个数组元素权重。
- 参数5:gamma,图1与图2作和后添加的数值。不要太大,不然图片一片白。总和等于255以上就是纯白色了。(gamma,gamma,gamma)
- 参数6:dst,输出图片
- 前提:图片分辨率相同!
浅显来说:dst=s1*a+s2*b+g
事先定义两个function
static void on_lightness(int b, void* userdata) {
Mat image = *((Mat*)userdata);
Mat dst = Mat::zeros(image.size(), image.type());
Mat m = Mat::zeros(image.size(), image.type());
addWeighted(image, 1.0, m, 0, b, dst);
imshow("亮度与对比度调整窗口", dst);
}
static void on_contrast(int b, void* userdata) {
Mat image = *((Mat*)userdata);
Mat dst = Mat::zeros(image.size(), image.type());
Mat m = Mat::zeros(image.size(), image.type());
double contrast = b / 100.0;
addWeighted(image, contrast, m, 0.0, 0, dst);
imshow("亮度与对比度调整窗口", dst);
}
添加滚动键Trackbar
namedWindow("亮度与对比度调整窗口", WINDOW_AUTOSIZE);
int lightness = 50;
int max_value = 100;
int contrast_value = 100;
createTrackbar("亮度:", "亮度与对比度调整窗口", &lightness, max_value, on_lightness, (void*)(&image));
createTrackbar("对比度:", "亮度与对比度调整窗口", &contrast_value, 200, on_contrast, (void*)(&image));
on_lightness(50, &image);