OpenCV中利用滑动条实时地观察不同阈值下的Canny算法效果

Canny算法:

void Canny(Input image, Output image of edges, Double threshold1, Double threshold2, int aperture_size=3 )

·第一个参数:输入的图像,读取图像的命令:Mat frame = imread("4.jpg",0); //imread中的第二个参数为0表示将图像读取灰度图像,可减少计算机的计算量,如果第二个参数为1,那么读取为彩色图像(本身是灰度图仍为灰度图);

·第二个参数:输出的边缘检测图,可直接利用imshow命令显示图像:imshow("显示窗口的名字", edge);

·第三个参数和第四个参数:threshold1和threshold2是检测边缘的两个参数,本文也就是利用滑动条改变它们的值来实时显示Canny算法的效果。两个阈值中大的值用于初始判断边缘,小的值用于对边缘进行修补;

第五个参数:sobel算子的孔径大小;一个近似求导的检测边缘的算子,一般取3。

下面这段程序是本文标题所述的实现方法:

#include <opencv2/opencv.hpp>
#include <opencv2\imgproc\imgproc.hpp>
#define WindowName "Test"	//定义窗口名字的宏
using namespace cv;			//使用命名空间,那么在程序中使用cv的语法时就不需要加前缀"cv::"

char Trackbarname1[50];		//用于存储滑动条1的名称
char Trackbarname2[50];		//用于存储滑动条2的名称
int pre_place1,pre_place2;	//滑动条对应的变量,两个阈值变量
const int max_place = 255;	//定义Trackbar的最大值
Mat frame,src,dst;			//定义Mat类型的frame变量,用于存储图像

int main(){
	namedWindow(WindowName,WINDOW_AUTOSIZE);    //定义自动适应图片大小的窗口
	pre_place1 = 20;							//滑动条的初始位置
	pre_place2 = 150;                           //滑动条的初始位置
	frame = imread("污渍块.jpg",0);             //读取名为1的jpg格式图片
	blur(frame,frame, Size(3,3) );              //降噪,减少噪声引起的假边缘
	sprintf(Trackbarname1,"阈值1 %d",max_place);//sprintf函数,格式化赋值
    sprintf(Trackbarname2,"阈值2 %d",max_place);//sprintf函数,格式化赋值
	createTrackbar(Trackbarname1,WindowName,&pre_place1,max_place); //创建滑动条
	createTrackbar(Trackbarname2,WindowName,&pre_place2,max_place); //创建滑动条
	while(1){
		pre_place1 = getTrackbarPos(Trackbarname1, WindowName);	//获取滑动条当前位置
		pre_place2 = getTrackbarPos(Trackbarname2, WindowName);	//获取滑动条当前位置
		Canny(frame,dst,pre_place1,pre_place2,3);
		imshow(WindowName,dst);
		if(waitKey(10)==27) break;     //按下Esc键退出程序
	}
	return 0;
}

原图1:


效果:


原图2:


效果:


这段代码可以为用户快速地确定阈值的合理值。


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

山颠海涯

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值