OpenCV Canny 边缘检测的原理和代码示范

13 min read

OpenCV Canny 边缘检测算法的原理:

OpenCV Canny 边缘检测算法是一种经典的边缘检测算法,它的实现基于一系列的操作和步骤。以下是 OpenCV Canny 边缘检测算法的主要步骤:

  1. 噪声滤波:为了提高边缘检测的精度和鲁棒性,一般使用高斯滤波器来预先进行图像的降噪处理。

  2. 灰度化处理:将原始图像转换为灰度图像,以便进行进一步的处理。

  3. 计算图像梯度:使用 Sobel 算子来计算图像的梯度信息,进而检测出图像中的边缘。

  4. 非极大值抑制:为了避免检测到非真实边缘,需要使用非极大值抑制算法来过滤掉那些宽度比较宽的边缘部分。

  5. 双阈值处理:使用双阈值来进行边缘的二值化处理,以便仅检测出符合预期的边缘。

  6. 边缘跟踪:将图像中的孤立边缘进行连接,形成完整的轮廓线。

OpenCV Canny 边缘检测算法的代码实现:

下面是一个简单的 OpenCV Canny 边缘检测的代码示范:

#include <opencv2/opencv.hpp>
using namespace cv;

int main(int argc, char **argv)
{
    Mat image = imread("lena.jpg", IMREAD_GRAYSCALE);  // 读取灰度图像
    Mat edges;
    Canny(image, edges, 100, 200);  // 进行 Canny 边缘检测
    imshow("Original Image", image);
    imshow("Canny Edges", edges);
    waitKey(0);
    return 0;
}

在这个示例代码中,我们首先读取了一张灰度图像,然后使用 Canny 函数来进行边缘检测。Canny 函数的第一个参数是输入图像,第二个参数是输出图像,第三个参数和第四个参数是两个阈值,用于设置双阈值处理的参数。最后,我们将原始图像和 Canny 边缘检测结果显示在了屏幕上。