边缘检查的一般步骤
1.滤波
边缘检查的算法主要是基于图像强度的一阶和二阶倒数,但倒数通常对噪声很敏感,因此必须采用滤波器来
改善与噪声有关的边缘检测器的性能。
2.增强
增强边缘的基础是确定图像各点的领域强度的变化值。增强算法可以将图像灰度点领域强度值有显著变化的点
凸显出来
3.检测
Canny函数常用的方法是通过阈值化方法来检测
void Canny(
inputArray image,
outputArray edges,
double thresholdint1,
double threshold2,
int apertursSize=3,
bool L2gradient=false
)
通常第三个参数和第四个参数的比值是3:1和2:1
下面是代码:
#include <opencv2/opencv.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>
using namespace cv;
int main()
{
Mat src = imread("1.jpg");
Mat src1 = src;
Mat out;
namedWindow("原图");
imshow("原图", src);
//方法一3以下的版本
Canny(src, out, 150, 100);
namedWindow("方法一的效果图");
imshow("方法一的效果图",out);
//方法二3以上的版本
Mat dst, edge, gray;
//创建一个与src1一样的矩阵
dst.create(src1.size(), src1.type());
//将原图像转为灰度
cvtColor(src1, gray, COLOR_RGB2GRAY);
//滤波(降噪)
blur(gray, edge, Size(3, 3));
//canny
Mat out2;
Canny(edge, out2, 15, 10);
dst = Scalar::all(0);
src1.copyTo(dst, out2);
namedWindow("方法二的效果图");
imshow("方法二的效果图", out2);
waitKey();
return 0;
}
运行结果如下: