边缘检测的一般步骤:

  1. 滤波——消除噪声

  2. 增强——使边界轮廓更加明显

  3. 检测——选出边缘点

Canny算法

Canny边缘检测算法被很多人推崇为当今最优秀的边缘检测算法,所以我们第一个就介绍他。

opencv中提供了Canny函数。

#include<opencv2\opencv.hpp>   #include<opencv2\highgui\highgui.hpp>using namespace std;using namespace cv;//边缘检测int main(){
    Mat img = imread("lol3.jpg");
    imshow("原始图", img);
    Mat DstPic, edge, grayImage;    //创建与src同类型和同大小的矩阵
    DstPic.create(img.size(), img.type());    //将原始图转化为灰度图
    cvtColor(img, grayImage, COLOR_BGR2GRAY);    //先使用3*3内核来降噪
    blur(grayImage, edge, Size(3, 3));    //运行canny算子
    Canny(edge, edge, 3, 9, 3);

    imshow("边缘提取效果", edge);

    waitKey(0);

}

看了canny算法提取的轮廓图,感觉真是厉害,居然把那么细致的额轮廓都提取出来了!
Android培训,安卓培训,手机开发培训,移动开发培训,云培训培训

Sobel算法

#include<opencv2\opencv.hpp>   #include<opencv2\highgui\highgui.hpp>using namespace std;using namespace cv;//边缘检测int main(){
    Mat img = imread("lol3.jpg");
    
    imshow("原始图", img);

    Mat grad_x, grad_y;
    Mat abs_grad_x, abs_grad_y, dst;    //求x方向梯度
    Sobel(img, grad_x, CV_16S, 1, 0, 3, 1, 1,BORDER_DEFAU
        
		

网友评论