文章目录
- cvCreateImage
- cvCvtColor
- 完整示例代码
cvCreateImage
使用OpenCV库在Delphi中创建一个灰度图像。让我解释一下:
gray_image := cvCreateImage(cvGetSize(image), IPL_DEPTH_8U, 1);
- cvGetSize(image): 这个函数返回给定图像(在这里是image)的大小。它返回一个CvSize类型的结构体,包含图像的宽度和高度。
- IPL_DEPTH_8U: 这是图像的深度(bit-depth)参数。在这里,IPL_DEPTH_8U 表示8位无符号整数,即每个像素的灰度级别范围在0到255之间。
- 1: 这是通道数。在这里,1 表示创建一个单通道的灰度图像。
- cvCreateImage: 这是OpenCV库中的函数,用于创建图像。它接受三个参数:大小、深度和通道数。然后,它返回一个指向新图像的指针。
所以,整个行的作用是创建一个与原始图像(image)大小相同的灰度图像,并将其赋值给 gray_image。这样,gray_image 就成为了一个单通道的灰度图像,可以在后续的图像处理中使用。
cvCvtColor
使用OpenCV库中的 cvCvtColor 函数将彩色图像转换为灰度图像。让我解释一下:
cvCvtColor(image, gray_image, CV_RGB2GRAY);
- image: 这是原始的彩色图像,即要进行颜色转换的图像。
- gray_image: 这是目标图像,即将结果存储到的图像。在这里,它是先前创建的灰度图像。
- CV_RGB2GRAY: 这是颜色转换的标志。在这里,CV_RGB2GRAY 表示从RGB(彩色)到灰度的颜色转换。这将把彩色图像中的每个像素转换为相应的灰度值。
所以,整个行的作用是将原始彩色图像 image 转换为灰度图像,并将结果存储在 gray_image 中。这是常见的图像处理操作,将彩色图像转换为灰度图像通常用于简化图像处理流程,降低计算复杂性。
完整示例代码
program cv_CvtColor;{$APPTYPE CONSOLE}
{$R *.res}usesSystem.SysUtils,ocv.highgui_c,ocv.core_c,ocv.core.types_c,ocv.imgproc_c,ocv.imgproc.types_c,uResourcePaths;constfilename = cResourceMedia + 'opencv_logo_with_text.png';filename_gray = cResourceMedia + 'opencv_logo_with_text_gray.png';varimage: pIplImage = nil;gray_image: pIplImage = nil;begintryimage := cvLoadImage(filename, 1);//创建一个纯灰度图片gray_image := cvCreateImage(cvGetSize(image), IPL_DEPTH_8U, 1);//把image图像灰度化存到gray_imagecvCvtColor(image, gray_image, CV_RGB2GRAY);//保存gray_imagecvSaveImage(filename_gray, gray_image);cvNamedWindow(filename, CV_WINDOW_AUTOSIZE);cvNamedWindow('Gray image', CV_WINDOW_AUTOSIZE);cvShowImage(filename, image);cvShowImage('Gray image', gray_image);cvWaitKey(0);cvReleaseImage(image);cvReleaseImage(gray_image);cvDestroyAllWindows;excepton E: Exception doWriteln(E.ClassName, ': ', E.Message);end;end.