opencv c++ 边缘提取

1、边缘

1.1 边缘定义

        以图像像素值突变最大的方向作为边缘法线,与边缘法线垂直的就是边缘。

        边缘强度:局部图像上的像素值突变程度(图像局部一阶梯度和二阶梯度值)。

        

 1.2 边缘类别

跃迁类型                                                           屋脊类型

 2、边缘提取

2.1 基于梯度的边缘提取

        步骤:高斯模糊去噪(选用3×3的核),再基于梯度提取边缘(使用robert算子、sobels算子、prewitt算子),最后对图像梯度进行阈值处理,大于T的保留,小于T的舍弃。

         缺点:单一阈值使得边缘图像不够连贯

 2.2 Canny边缘提取

        步骤:

        1、滤波处理(高斯滤波)。

        2、使用梯度算子获取梯度值G、梯度方向\Theta

        3、非最大抑制:保留与\Theta垂直方向上,梯度值最大的像素点,如下左1、2图上,当红框的像素点值,是在橙色箭头方向上最大的,则保留。

在实际应用中为减少运算量,只会对如下\frac{\pi }{4}\frac{\pi }{2}\frac{3\pi }{4}等角度的梯度进行非最大抑制。

        4、高低阈值链接,分别设定高低阈值T1、T2,一般T1/T2 = 2~3,将像素值大于T1的像素点全部保留,小于T2的全部舍弃,T1到T2之间的如果在其八邻域内高阈值保留像素点,则保留,反之丢弃。

  

 代码示例:

static void cannny_track_bar(int b, void* image_data) {
	//canny
	Mat image = *((Mat*)image_data);
	Mat edge1;
	Canny(image, edge1, b, b*2, 3);
	imshow("canny", edge1);
}
void edge_catch(Mat& image)
{
	namedWindow("canny", WINDOW_FREERATIO);
	int t = 50;
	createTrackbar("canny bar", "canny", &t, 100, cannny_track_bar,(void*)&image);
	cannny_track_bar(50, &image);
}

 结果:

 

 

 

  • 4
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值