昨天的在做配准的时候用到了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;
}