用 Canny 算子检测图像轮廓
通过对梯度幅值的阈值化,可以获得图像中主要边缘的二值分布图。边缘勾画出了图像的元素,含有重要的视觉信息。正因如此,边缘可应用于目标识别等领域。但是简单的二值边缘分布图有两个主要缺点:
第一,检测到的边缘过厚,这加大了识别物体边界的难度;
第二,也是更重要的,通常不可能找到既低到足以检测到图像中所有重要边缘,又高到足以避免产生太多无关紧要边缘的阈值。
这是一个难以权衡的问题,Canny 算法试图解决这个问题。
Canny 算法可通过 OpenCV 的 cv::Canny 函数实现。使用这个算法时,需要指定两个阈值:
// 应用 Canny 算法
cv::Mat contours;
cv::Canny(image, // 灰度图像
contours, // 输出轮廓
125, // 低阈值
350); // 高阈值