canny函数与sobel函数详解

canny函数

(1)若某一像素位置的幅值超过高阈值,该像素被保留为边缘像素。 
(2)若某一像素位置的幅值小于低阈值,该像素被排除。 
(3)若某一像素位置的幅值在两个阈值之间,该像素仅仅在连接到一个高于高阈值的像素时被保留。 
void Canny(inputArray,outputArray,double threshold1,double threshold2,int apertureSize=3,bool L2gradient=false) 
*第一个参数,输入图像,且需为单通道8位图像。 
*第二个参数,输出的边缘图。 
*第三个参数,第一个滞后性阈值。用于边缘连接。 
*第四个参数,第二个滞后性阈值。用于控制强边缘的初始段,高低阈值比在2:1到3:1之间。 
*第五个参数,表明应用sobel算子的孔径大小,默认值为3。 
*第六个参数,bool类型L2gradient,一个计算图像梯度幅值的标识,默认值false。

sobel函数

void Sobel(inputArray,outputArray,int ddepth,int dx,int dy,int ksize=3,double scale=1,double delta=0,int borderType=BORDER_DEFAULT) 
*第一个参数,输入图像。 
*第二个参数,输出图像。 
*第三个参数,输出图像深度。 
*第四个参数,x方向上的差分阶数。 
*第五个参数,y方向上的差分阶数。 
*第六个参数,Sobel核的大小,默认值为3,必须为1、3、5、7。当为1时,往往使用3x1、1x3的内核,这种情况下,没有进行高斯平滑操作。 
*第七个参数,计算导数值时可选的缩放因子,默认值1,表示默认情况下没用应用缩放。 
*第八个参数,表示在结果存入输出图像之前可选的delta值,默认值0。 
*第九个参数,边界模式。 
补充说明: 
(1)当内核大小为3时,Sobel内核可能产生比较明显的误差,为了解决这一问题,Opencv提供了Scharr函数,但该函数仅作用于大小为3的内核,该函数的运算与Sobel函数一样快,但结果却更加精确。 
(2)因为Sobel算子结合了高斯平滑和分化,因此结果会具有更多的抗噪性。


实例:
    Mat x_edgeImg, y_edgeImg;
    Mat abs_x_edgeImg, abs_y_edgeImg;
    Sobel(tempel_img,x_edgeImg, CV_16S, 1, 0, 3, 1, 1,  BORDER_DEFAULT);
    convertScaleAbs(x_edgeImg, abs_x_edgeImg);
    Sobel(tempel_img, y_edgeImg, CV_16S, 0, 1, 3, 1, 1,  BORDER_DEFAULT);
    convertScaleAbs(y_edgeImg, abs_y_edgeImg);
    addWeighted(abs_x_edgeImg, 0.5, abs_y_edgeImg, 0.5, 0, temp_canny_img);
	imshow("canny",temp_canny_img);
addWeighted()函数是将两张相同大小,相同类型的图片融合的函数
void addWeighted( const CvArr* src1, double alpha,const CvArr* src2, double beta,double gamma, CvArr* dst );
参数1:src1,第一个原数组.
参数2:alpha,第一个数组元素权重
参数3:src2第二个原数组
参数4:beta,第二个数组元素权重
参数5:gamma,图1与图2作和后添加的数值。不要太大,不然图片一片白。总和等于255以上就是纯白色了。
参数6:dst,输出图片

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值