【OpenCV 基础知识 3】边缘检测

发布于:2024-05-15 ⋅ 阅读:(90) ⋅ 点赞:(0)

cvCanny

这行代码使用OpenCV库中的 cvCanny 函数对灰度图像进行边缘检测。让我解释一下:

cvCanny(gray, dst, 10, 100, 3);
  1. gray: 这是输入的灰度图像,即要进行边缘检测的图像。
  2. dst: 这是输出的边缘图像,即将结果存储到的图像。
  3. 10: 这是Canny边缘检测算法的低阈值。像素梯度值低于该阈值的边缘点将被抑制。
  4. 100: 这是Canny边缘检测算法的高阈值。像素梯度值高于该阈值的像素将被认为是强边缘,而低于该阈值但高于低阈值的像素将根据连接性保留或抑制。
  5. 3: 这是Sobel运算符的内核大小,用于计算图像的梯度。在这里,内核大小为3,表示使用3x3的Sobel内核。

所以,整个行的作用是使用Canny边缘检测算法对输入的灰度图像进行边缘检测,并将结果存储在 dst 中。这是一种常见的图像处理操作,用于检测图像中的边缘结构。

完整示例代码

program cv_Canny;

{$APPTYPE CONSOLE}
{$R *.res}

uses
  System.SysUtils,
  ocv.highgui_c,
  ocv.core_c,
  ocv.core.types_c,
  ocv.imgproc_c,
  ocv.imgproc.types_c,
  uResourcePaths;

const
  filename = cResourceMedia + 'cat2.jpg';

var
  image: pIplImage = nil;
  gray: pIplImage = nil;
  dst: pIplImage = nil;

begin
  try

    image := cvLoadImage(filename);
    WriteLn(Format('[i] image: %s', [filename]));

    //创建两张纯灰图像
    gray := cvCreateImage(cvGetSize(image), IPL_DEPTH_8U, 1);
    dst := cvCreateImage(cvGetSize(image), IPL_DEPTH_8U, 1);


    cvNamedWindow('original', CV_WINDOW_AUTOSIZE);
    cvNamedWindow('gray', CV_WINDOW_AUTOSIZE);
    cvNamedWindow('cvCanny', CV_WINDOW_AUTOSIZE);

    // 灰度化图片
    cvCvtColor(image, gray, CV_RGB2GRAY);

    // 边缘检测
    cvCanny(gray, dst, 10, 100, 3);


    cvShowImage('original', image);
    cvShowImage('gray', gray);
    cvShowImage('cvCanny', dst);

    cvWaitKey(0);

    cvReleaseImage(image);
    cvReleaseImage(gray);
    cvReleaseImage(dst);

    cvDestroyAllWindows();
  except
    on E: Exception do
      WriteLn(E.ClassName, ': ', E.Message);
  end;

end.

网站公告

今日签到

点亮在社区的每一天
去签到