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}
uses
System.SysUtils,
ocv.highgui_c,
ocv.core_c,
ocv.core.types_c,
ocv.imgproc_c,
ocv.imgproc.types_c,
uResourcePaths;
const
filename = cResourceMedia + 'opencv_logo_with_text.png';
filename_gray = cResourceMedia + 'opencv_logo_with_text_gray.png';
var
image: pIplImage = nil;
gray_image: pIplImage = nil;
begin
try
image := cvLoadImage(filename, 1);
//创建一个纯灰度图片
gray_image := cvCreateImage(cvGetSize(image), IPL_DEPTH_8U, 1);
//把image图像灰度化存到gray_image
cvCvtColor(image, gray_image, CV_RGB2GRAY);
//保存gray_image
cvSaveImage(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;
except
on E: Exception do
Writeln(E.ClassName, ': ', E.Message);
end;
end.