OpenCV4学习笔记(3.0)官方教程 | Load, Modify, and Save an Image 加载、修改和保存图像

阅读这篇博客之前,需要先掌握a如何使用cv::imread来读取图像和使用cv::imshow来显示图像,这些内容在上一篇博客中都有提到。

目标

  1. 使用cv::imread方法加载图像。
  2. 使用cv::cvtColor方法将BGR色彩空间的图像转化为灰度图像。
  3. 使用cv::imwrite方法将转换后的图像保存到本地磁盘中。

源代码

#include <opencv2/opencv.hpp>
using namespace cv;
int main( int argc, char** argv )
{
	char* imageName = argv[1];
 	Mat image;
 	image = imread( imageName, IMREAD_COLOR );
 	if( argc != 2 || !image.data )
 	{
   		printf( " No image data \n " );
   		return -1;
 	}
 	Mat gray_image;
 	cvtColor( image, gray_image, COLOR_BGR2GRAY );
 	imwrite( "../../images/Gray_Image.jpg", gray_image );
 	namedWindow( imageName, WINDOW_AUTOSIZE );
 	namedWindow( "Gray image", WINDOW_AUTOSIZE );
 	imshow( imageName, image );
 	imshow( "Gray image", gray_image );
 	waitKey(0);
 	return 0;
}

解释

先使用cv::imread方法加载图像,imageName存储的是从控制台输入的图像路径,在这个例子中,假设输入的图像的色彩空间为BGR。


将图像从BGR色彩空间转换到灰度格式,可以直接使用OpenCV提供的API方法来完成这个转换操作。

cvtColor( image, gray_image, COLOR_BGR2GRAY );

这个函数有三个参数:

  • image是一个Mat对象,作为输入图像/原始图像(src)
  • gray_image也是一个Mat对象,用来存储转换之后的灰度图像(dst)。
  • 最后一个参数指定了转换发生在哪两种色彩空间之间,按照目标的要求,这里需要设置为COLOR_BGR2GRAY(使用cv::imread读取彩色图像时,BGR为默认通道顺序)。

因为这里使用了opencv2/opencv.hpp所以看不出来,cv::cvtColor方法属于opencv2/imgproc.hpp头文件,如果还是使用上一次的头文件这里会报错,提示找不到方法。

最后一个参数自OpenCV 4.0.0以来就由CV_BGR2GRAY改为了COLOR_BGR2GRAY。


我们现在有了一张新的灰度图像,如果关闭程序,内存将自动释放,这张灰度图像也会随之丢失,所以需要使用一个与cv::imread相似的方法——cv::imwrite方法,用来将灰度图像存储到本地磁盘中。

imwrite(“ ../../images/Gray_Image.jpg”,gray_image);

这句话能够将灰度图像保存在当前目录的二级父目录下的images文件夹中,文件名为Gray_Image.jpg。


最后我们需要看看图像是否被正确的转换了,创建两个窗口来显示原始图像和新图像。

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

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

最后使用waitKey方法,让程序永久等待直到任一按键被按下。

结果

实现功能非常简单,不做演示了。

  • 运行程序时,显示了一张彩色图像和一张灰度图像。
  • 在对应的文件路径下,得到了存储的灰度图像。

END

posted @ 2020-08-18 13:45  仲夏之夜丶微风蝉鸣  阅读(355)  评论(0编辑  收藏  举报