学习OpenCV 12 图像分析
Canny边缘检测The Canny Edge Detector
在Canny算法中,先在X和Y方向上求得一阶导,然后将它们组合成为四个方向的导数,其中方向导数是局部最大值的点是组成边缘的候选项。这个算法通过对像素应用滞后阈值(hysteresis threshold)来形成这些轮廓(contour),即采用了两个阈值,上阈值(the upper threshold)和下阈值(the lower threshold)。具体如下:
- 若一个像素的梯度大于较大值,就接受;
- 若一个像素的梯度小于较小值,就抛弃;
- 若一个像素的梯度介于两者之间,那么只有当它连接到一个高于阈值的像素时,才接受。
Canny算法建议(上阈值:下阈值)介于(2:1)和(3:1)之间。OpenCV中由以下函数实现
void cv::Canny(
cv::InputArray image, //输入图像(单通道)
cv::OutputArray edges, //输出图像(灰度图即布尔图)
double threshold1, //下阈值
double threshold2, //上阈值
int apertureSize=3, //Sobel导数算子中的aperture大小
bool L2gradient=false //true=L2-norm(更精准)
);
注意在cv::Canny()参数中,输入图像必须!!!是单通道图像