作者:翟天保Steven
版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处
void Canny( InputArray image, OutputArray edges,
double threshold1, double threshold2,
int apertureSize = 3, bool L2gradient = false );
Canny边缘检测算法是一种多级边缘检测算法,也被很多人认为是边缘检测的最优算法。其目标是找到一个最优的边缘检测算法,用三个主要评价标准来表征是否为最优:
为了满足上述标准,Canny使用了变分法,这是一种寻找满足特定功能的函数的方法。最优检测用4个指数函数项的和表示,其非常近似于高斯函数的一阶导数。
Canny边缘检测的步骤:
#include <iostream>
#include <opencv2/opencv.hpp>
using namespace std;
using namespace cv;
void main()
{
// 灰度Canny检测
Mat src = imread("test.jpg", 0);
Mat result;
Canny(src, result, 100, 150, 3, true);
// 高阶Canny用法,转灰度图,降噪,将得到的边缘作为掩码加到原图上,得到彩色的边缘图
Mat src2 = imread("test.jpg");
Mat edge, result2;
result2=cv::Mat::zeros(src2.size(), src2.type());
blur(src, edge, Size(5, 5));
Canny(edge, edge, 3, 9, 3);
src2.copyTo(result2, edge);
// 结果显示
imshow("src", src2);
imshow("gray", result);
imshow("color", result2);
waitKey(0);
system("pause");
}
注意函数的两个阈值与边缘的识别息息相关。
如果文章帮助到你了,可以点个赞让我知道,我会很快乐~加油!
联系客服