cv::createtrackbar函数的使用

来源:互联网 发布:顺德经济发展数据 编辑:程序博客网 时间:2024/06/10 18:23

昨天的在做配准的时候用到了canny算子,由于不知道如何确定算子的高低阈值,于是想到了建立一个滑动条

在网上看了几篇博客,也看了官方的例程

说的比较详细

但是一直搞不懂这个回调函数的问题

到现在只能说是一知半解

把自己的理解说一下,有不对的地方请大家指正

比如这一句

cv::createTrackbar("high","low_high",&high,300,canny_low);

high是滑动条的名称

low_high是显示进度条的窗口的名称

&high是与滑动条关联的变量的地址

300是滑动条最大值(默认从0开始)

canny_low就是所谓的回调函数,这个函数声明时的形参好像必须是(int,void*),比如说要改变canny算子的上限值,就需要定义滑动条之后添加

canny_low(high,0);

并且在回掉函数中定义

cv::Canny(src2,dst2,low,high,3);

说了半天不得要领,表达能力太差了。。。上代码吧

void canny_low(int,void*){cv::Canny(src1,dst,low,high,3);cv::Canny(src2,dst2,low,high,3);imshow("canny",dst);imshow("canny2",dst2);}int main( int argc, char** argv ){ /// 加载图像 (两图像的大小与类型要相同) src1 = imread("C:\\Users\\Administrator\\Desktop\\code\\photo\\boat\\1-0.bmp"); src2 = imread("C:\\Users\\Administrator\\Desktop\\code\\photo\\boat\\(p25)(x10)(s1.2)-1.bmp"); if( !src1.data ) { printf("Error loading src1 \n"); return -1; } if( !src2.data ) { printf("Error loading src2 \n"); return -1; } /// 初始化为零 cv::namedWindow("low_high"); cv::createTrackbar("low","low_high",&low,100,canny_low); canny_low(low,junhenghua); cv::createTrackbar("high","low_high",&high,300,canny_low);  canny_low(high,0);  cv::Canny(src1,dst,val_low,val_high,3);cv::Canny(src2,dst2,val_low,val_high,3);cv::imwrite("canny1.bmp",dst);cv::imwrite("canny2.bmp",dst2); /// 按任意键退出 waitKey(0); return 0;}


0 0