Opencv(十五)创建图像窗口滑动条

在图像处理时,有时需要动态调节某些参数,以便图像处理的效果更加明显,故改变参数数值的滑动条可以更好的操作。

1、createTrackbar()函数

Opencv中使用createTrackbar()函数在显示图像的窗口上创建滑动条

int cv::createTrackbar(const String & trackbarname,
                       const String & winname,
                       int * value,
                       int  count,
                       TrackbarCallback onChange = 0,
                       void * userdata = 0 
                       )

trackbarname:滑动条的名称

winname:创建滑动条窗口的名称

value:指向整数变量的指针,该指针指向的值反映滑块的位置,创建后,滑块位置由此变量定义

count:滑动条的最大取值

onChange:每次滑块更改位置时要调用的函数的指针。该函数应该原型为void Foo(int,void *);,其中第一个参数是轨迹栏位置,第二个参数是用户数据。如果回调是NULL指针,则不会调用任何回调,只更新数值

userdata:传递给回调函数的可选参数

该函数能够在图像窗口的上方创建一个范围从0开始的整数滑动条,由于滑动条只能输出整数,如果需要得到小数,必须进行后续处理,例如输出值除以10得到含有1位小数的数据。函数第一个参数是滑动条的名称,第二个参数是创建滑动条的图像窗口的名称。第三个参数是指向整数变量的指针,该指针指向的值反映滑块的位置,在创建滑动条时该参数确定了滑动块的初始位置,当滑动条创建完成后,该指针指向的整数随着滑块的移动而改变。第四个参数是滑动条的最大取值。第五个参数是每次滑块更改位置时要调用的函数的指针。该函数应该原型为void Foo(int,void *),其中第一个参数是轨迹栏位置,第二个参数是用户数据,如果回调是NULL指针,则不会调用任何回调,只更新数值。最后一个参数是传递给回调函数的void *类型数据,如果使用的第三个参数是全局变量,可以不用忽略最后一个参数,使用参数的默认值即可。

2、代码

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

using namespace std;
using namespace cv;


//为了能在被调函数中使用,所以设置成全局的
int value;
void callBack(int, void*);//滑动条回调函数
Mat img1, img2;

int main()
{
	img1 = imread("");
	if(!img1.data)
	{
		cout << "请确认是否输入正确的图像文件" << endl;
		return -1;
	}

	namedWindow("滑动条改变图像亮度");
	imshow("滑动条改变图像亮度", img1);
	value = 100;//滑动条创建时的初值
	//创建滑动条
	createTrackbar("亮度值百分比", "滑动条改变图像亮度", &value, 600, callBack, 0);

	waitKey(0);
	return 0;

}

static void callBack(int, void*)
{
	float a = value / 100.0;
	img2 = img1 * a;
	imshow("滑动条改变图像亮度", img2);
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值