cvCanny
这行代码使用OpenCV库中的 cvCanny 函数对灰度图像进行边缘检测。让我解释一下:
cvCanny(gray, dst, 10, 100, 3);
- gray: 这是输入的灰度图像,即要进行边缘检测的图像。
- dst: 这是输出的边缘图像,即将结果存储到的图像。
- 10: 这是Canny边缘检测算法的低阈值。像素梯度值低于该阈值的边缘点将被抑制。
- 100: 这是Canny边缘检测算法的高阈值。像素梯度值高于该阈值的像素将被认为是强边缘,而低于该阈值但高于低阈值的像素将根据连接性保留或抑制。
- 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.