文档结构  
翻译进度:已翻译     翻译赏金:0 元 (?)    ¥ 我要打赏

注意

我们假设您已经了解了如何利用imread函数加载图片并且在窗口中显示它(利用imshow函数)。否则请阅读教程 Load and Display an Image

目标

在这篇教程中您将会学习如何:

  • 利用imread函数加载一张图片
  • 利用cvtColor函数将一种图片从BGR格式转化为灰度格式
  • 将你转换后的图片保存至硬盘文件中(利用imwrite函数)

代码

这里是代码:

#include <cv.h>
#include <highgui.h>

using namespace cv;

int main( int argc, char** argv )
{
 char* imageName = argv[1];

 Mat image;
 image = imread( imageName, 1 );

 if( argc != 2 || !image.data )
 {
   printf( " No image data \n " );
   return -1;
 }

 Mat gray_image;
 cvtColor( image, gray_image, CV_BGR2GRAY );

 imwrite( "../../images/Gray_Image.jpg", gray_image );

 namedWindow( imageName, CV_WINDOW_AUTOSIZE );
 namedWindow( "Gray image", CV_WINDOW_AUTOSIZE );

 imshow( imageName, image );
 imshow( "Gray image", gray_image );

 waitKey(0);

 return 0;
}

 

第 1 段(可获 2 积分)

解释

  1. 在一开始利用imread函数加载图片,通过 imageName变量给出了图片路径。在这个例子中,假设你加载的是一张BGR格式的图像。
  2. 现在要把图像从BGR格式转换为灰度格式。OpenCV中一个很好的函数能完成这个功能:
    cvtColor( image, gray_image, CV_BGR2GRAY );

    如您所见,cvtColor函数包含了如下变量:

  • 一个源图像 (image)

  • 一个目的图像 (gray_image),将利用其保存最终结果。

  • 一个表示将进行何种变换的额外变量。在这个例子中使用了CV_BGR2GRAY。(因为利用函数 imread读取BGR彩色图像有一个默认通道)。

   3. 现在得到新的灰度图像,需要将其保存在硬盘上(否则它将在程序运行结束后消失)。为了保存它我们利用一个类似 imread的函数:imwrite

imwrite( "../../images/Gray_Image.jpg", gray_image );

      利用该函数将gray_image变量以Gray_Image.jpg的名称保存在程序images文件夹下两层路径中。

   4. 最后检查一下图像。我们创建了两个窗口然后利用它们显示原始图像和新的灰度图像:

namedWindow( imageName, CV_WINDOW_AUTOSIZE );
namedWindow( "Gray image", CV_WINDOW_AUTOSIZE );

imshow( imageName, image );
imshow( "Gray image", gray_image );

   5. 添加一个waitKey(0)函数用来等候键盘的输入。

第 2 段(可获 2 积分)

结果

运行程序时,你将会得到类似这样的图像:

Load Save Image Result 1

检测文件夹(在我这是 images文件夹),你应该得到一个新的 .jpg文件,文件是Gray_Image.jpg

Load Save Image Result 2

恭喜你完成了本次教程

第 3 段(可获 2 积分)

文章评论