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

摘要:
Imread读取图像并使用cv:cvtColor方法将BGR彩色空间图像转换为灰度图像:imwrite方法将转换后的图像保存到本地磁盘:源代码#include<image=Imread(imageName;}Matgray_image;imwrite(“../../images/Gray_image.jpg”;Gray_image);ImageName存储从控制台输入的图像路径;

阅读这篇博客之前,需要先掌握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 
 " );
   		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

免责声明:文章转载自《OpenCV4学习笔记(3.0)官方教程 | Load, Modify, and Save an Image 加载、修改和保存图像》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇微信公众平台开发(75) 语音识别VirtualBox中Ubuntu 14.04屏幕分辨率不能设置的问题下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

读设计模式之禅6大设计原则

单一职责原则:简称SRP,指有且仅有一个原因引起类的变更。在设计类的时候尽可能使类的接口简单、清晰,职责分明;而类则尽量做到只有一个原因引起变化。这里强调的是类的内在逻辑简洁性。 里氏替换原则:所有引用基类的地方必须能透明地使用其子类的对象。这里从继承角度讲多态的条件,子类必须实现父类的所有方法,并且子类可以进行扩展。注:子类在覆写父类的方法时输入参数可以...

Effective C# 原则9:明白几个相等运算之间的关系(译)

Effective C# 原则9:明白几个相等运算之间的关系(译)Item 9: Understand the Relationships Among ReferenceEquals(), static Equals(), instance Equals(), and operator== 明白ReferenceEquals(), static Equal...

Tomcat启动

Bootstrapping TomcatThe bootstrapping process is actually rather simple. All we have to do is:1、Set up the environment variables required by this Tomcat instance2、Instantiate the...

Spring Boot 面试题

1、列举一些SpringBoot特性 1、创建独立的Spring项目 2、内置Tomcat和Jetty容器 3、提供一个starter POMs来简化Maven配置 4、提供了一系列大型项目中常见的非功能性特性,如安全、指标,健康检测、外部配置等 5、完全没有代码生成和xml配置文件 2、有什么常用的Spring Boot启动器?spring-boot...

WPF 实现已绑定集合项目的移除时动画过渡

信不信由你,这个场景貌似没有官方的完美解决方案。我认为这个要求一点都不过分,花了很长时间 bai google du,就是没找到好的方案。这是我花了一天时间才搞通的一个方案,跟大家分享,虽然仍然不太完美,但是希望对大家有用。 对完美的憧憬 一个已绑定到 ItemsControl 的集合,是不能通过 ItemsControl.Items 属性来访问的,如果你...

SpringMVC类型转换、数据绑定

SpringMVC类型转换、数据绑定详解[附带源码分析] 目录 前言 属性编辑器介绍 重要接口和类介绍 部分类和接口测试 源码分析 编写自定义的属性编辑器 总结 参考资料 前言 SpringMVC是目前主流的Web MVC框架之一。  如果有同学对它不熟悉,那么请参考它的入门blog:http://www.cnblogs.com/fangjian0...