文章目录
TrackBar
本文头文件及命名空间:
#pragma once
#include <opencv2\opencv.hpp>
#include <iostream>
using namespace std;
using namespace cv;
TackBar即滑动条,可以按照需求动态调整图像,如调整图像的亮度、对比度、某一通道的像素值等。
在图像显示中添加滑动条,需要使用两个函数: 1. 创建滑动条 createTrackBar() 2. 回调函数 TrackbarCallback()
创建滑动条
trackbarname :滑动条的名称
winname : 显示图像的窗口名
value : 滑动条的初始值,int指针
count : 滑动条的最大值
onChange : 回调函数
userdata : 无类型的指针,一般为图像,Mat对象的指针
回调函数:
pos : 滑动条当前的取值
userdata : 创建滑动条传入的对象,即无类型的指针
使用滑动条,需要将两函数配合使用。
创建滑动条与回调函数类似信号与槽,滑动条创建后,改变滑动条位置,会自动调用回调函数。
滑动条默认从0开始,范围到输入的最大值
回调函数的对象是无类型的指针,使用时需要转为对应类型。
单个TrackBar
当只有单个TrackBar时,可以使用传参的方法。此时TrackBar需要传入Mat对象的指针,回调函数需要使用传入的指针参数,来对图像操作。
修改图像的对比度与亮度,可以使用convertTo完成。
回调函数中,新创建的Mat对象dst一定要是深拷贝,浅拷贝只复制矩阵头部,dst一旦修改,src也会被修改。
测试代码:
//回调函数1,使用主函数的局部变量,使用了传入的参数
void mytrackBarCallback(int pos, void* userdata) {
//将无类型指针转为Mat类型指针
Mat* user = (Mat*)userdata;
//创建新的Mat对象存放结果,在原始图像的直接操作会累积,产生意外结果
Mat dst ;
//调整对比度
(* user).convertTo(dst, -1, pos * 0.01);
imshow("image show", dst);
}
//trackBar测试
void