OpenCV3编程入门读书笔记5-边缘检测

一、边缘检测的一般步骤

1、滤波

边缘检测的算法主要是基于图像强度的一阶和二阶导数,但导数通常对噪声很敏感,因此必须采用滤波器来改善与噪声有关的边缘检测器的性能。

2、增强

增强边缘的基础是确定图像各点领域强度的变化值。增强算法可以将图像灰度点领域强度值有显著变化的点凸显出来。在具体编程实现时,可通过计算梯度幅值来确定。

3、检测

经过增强的图像,往往领域中有很多点的梯度值比较大,而在特定的应用中,这些点并不是要找的边缘点,所以应该采用某种方法来对这些点进行取舍。实际工程中,常用的方法是通过阈值化方法来检测。

二、基于Canny、Sobel、laplacian、Scharr算子的边缘检测示例

Mat srcImage = imread("E:\\CodeResource\\opencv\\car_pic\\car5.jpg",0);
imshow("srcImage", srcImage);

Mat canyImage;
Canny(srcImage, canyImage, 3, 9, 3);
imshow("canyImage", canyImage);

Mat sobel_x;
Mat sobel_y;
Mat sobelImage;
Sobel(srcImage, sobel_x,CV_16S,1,0,3,1,1,BORDER_DEFAULT);
convertScaleAbs(sobel_x, sobel_x);
Sobel(srcImage, sobel_y, CV_16S, 0, 1, 3, 1, 1, BORDER_DEFAULT);
convertScaleAbs(sobel_y, sobel_y);
addWeighted(sobel_x, 0.5, sobel_y, 0.5, 0, sobelImage);
imshow("sobel_x", sobel_x);
imshow("sobel_y", sobel_y);
imshow("sobelImage", sobelImage);

Mat laplacianImage;
Laplacian(srcImage, laplacianImage, CV_16S, 3, 1, 0, BORDER_DEFAULT);
convertScaleAbs(laplacianImage, laplacianImage);
imshow("laplacianImage", laplacianImage);

Mat scharr_x;
Mat scharr_y;
Mat scharrImage;
Scharr(srcImage, scharr_x, CV_16S, 1, 0, 1, 0, BORDER_DEFAULT);
convertScaleAbs(scharr_x, scharr_x);
Scharr(srcImage, scharr_y, CV_16S, 0, 1, 1, 0, BORDER_DEFAULT);
convertScaleAbs(scharr_y, scharr_y);
addWeighted(scharr_x, 0.5, scharr_y, 0.5, 0, scharrImage);

imshow("scharr_x", scharr_x);
imshow("scharr_y", scharr_y);
imshow("scharrImage", scharrImage);

waitKey(0);

效果图:

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值