【OpenCV 基础知识 2】灰度化图片

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

cvCreateImage

使用OpenCV库在Delphi中创建一个灰度图像。让我解释一下:

gray_image := cvCreateImage(cvGetSize(image), IPL_DEPTH_8U, 1);
  1. cvGetSize(image): 这个函数返回给定图像(在这里是image)的大小。它返回一个CvSize类型的结构体,包含图像的宽度和高度。
  2. IPL_DEPTH_8U: 这是图像的深度(bit-depth)参数。在这里,IPL_DEPTH_8U 表示8位无符号整数,即每个像素的灰度级别范围在0到255之间。
  3. 1: 这是通道数。在这里,1 表示创建一个单通道的灰度图像。
  4. cvCreateImage: 这是OpenCV库中的函数,用于创建图像。它接受三个参数:大小、深度和通道数。然后,它返回一个指向新图像的指针。

所以,整个行的作用是创建一个与原始图像(image)大小相同的灰度图像,并将其赋值给 gray_image。这样,gray_image 就成为了一个单通道的灰度图像,可以在后续的图像处理中使用。

cvCvtColor

使用OpenCV库中的 cvCvtColor 函数将彩色图像转换为灰度图像。让我解释一下:

cvCvtColor(image, gray_image, CV_RGB2GRAY);
  1. image: 这是原始的彩色图像,即要进行颜色转换的图像。
  2. gray_image: 这是目标图像,即将结果存储到的图像。在这里,它是先前创建的灰度图像。
  3. 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.