Chinaunix首页 | 论坛 | 博客
  • 博客访问: 9413312
  • 博文数量: 1748
  • 博客积分: 12961
  • 博客等级: 上将
  • 技术积分: 20070
  • 用 户 组: 普通用户
  • 注册时间: 2009-01-09 11:25
个人简介

偷得浮生半桶水(半日闲), 好记性不如抄下来(烂笔头). 信息爆炸的时代, 学习是一项持续的工作.

文章分类

全部博文(1748)

文章存档

2024年(24)

2023年(26)

2022年(112)

2021年(217)

2020年(157)

2019年(192)

2018年(81)

2017年(78)

2016年(70)

2015年(52)

2014年(40)

2013年(51)

2012年(85)

2011年(45)

2010年(231)

2009年(287)

分类: 其他平台

2018-03-23 14:07:15

https://blog.csdn.net/guduruyu/article/details/41749107

OpenCV3和OpenCV2大同小异,图片的读取,通过函数cv::imread()来实现的;显示通过函数cv::imshow()来实现;而保存则通过cv::imwrite()来实现。


1、图片的读取,通过函数cv::imread()读取。

第一个参数为图片文件的相对路径或绝对路径(注意:路径一定要正确,同时也要确保文件的格式正确);

第二个参数为flag,cv::imread()支持的flag有: 

cv::IMREAD_COLOR(总是读取到三通道数组中)、

cv::IMREAD_GRAYSCALE(读取到单通道数组中)、

cv::IMREAD_ANYCOLOR(读取的通道由具体的文件决定,最高3通道)、

cv::IMREAD_ANYDEPTH(允许读取超过深度超过8位的图像)、

cv::IMREAD_UNCHANGED(完全按照文件的原有形式进行读取)、

默认情况下读取3通道。

[cpp] view plain copy
  1. cv::Mat cv::imread(  
  2.     const string& filename, // Input filename  
  3.     int flags = cv::IMREAD_COLOR // Flags set how to interpret file  
  4.     );  


2、图片的显示使用的是cv::imshow()函数。

第一个参数为窗口的名称,第二个参数为要显示的图片文件,也可以通过函数cv::namedWindow()先创建一个窗口供cv::imshow()使用。

[cpp] view plain copy
  1. void cv::imshow(  
  2.     const string& name, // Handle used to identify window  
  3.     cv::InputArray image // Image to display in window  
  4. );  



3、图片的保存,通过cv::imwrite()函数来实现。其中,第一个参数为保存目标文件的路径名称,图片的类型通过路径的后缀进行标识,opencv3支持写图片的类型有:

“.jpg”或“.jpeg”:基线JPEG;8位,单通道或3通道输入。

“.jp2”:JPEG2000;8位或16位,单通道或3通道输入。

“.tiff”或“tif”:TIFF;8位或16位,单通道、3通道或4通道输入。

“.png”:PNG;8位或16位,单通道、3通道或4通道输入。

“.bmp”:BMP;8位,单通道、3通道或4通道输入。

“.ppm”或“pgm”:NetPBM;8位,单通道(PGM)或3通道(PPM)。

第二个参数,是图像数据输入,注意与写图片的类型匹配。

第三个参数,可选,用于参数化的类型,opencv3中支持的params如下:

cv::IMWRITE_JPG_QUALITY:表示JPEG的质量,取值范围0-100,默认值为95;

cv::IMWRITE_PNG_COMPRESSION:PNG的压缩率(值越高压缩率越高),取值范围0-9,默认值为3;

cv::IMWRITE_PXM_BINARY:使用二进制形式写PPM、PGM、PBM文件,取值0或1,默认值1;


[cpp] view plain copy
  1. bool cv::imwrite(  
  2.     const string& filename, // Input filename  
  3.     cv::InputArray image, // Image to write to file  
  4.     const vector<int>& params = vector<int>() // (Optional) for parameterized fmts  
  5.     );  


最后,为了显示保存的效果,使用了函数cvtColor将原图从BGR彩色空间变换为灰度空间中的图形(第三个变量表为flag,表示转换前后的形式)。

从上看我们可以看出,OpenCV2系列中的flag的风格为CV_XXXX,而在OpenCV3中flag的定义风格均变为cv::XXXX)。


实现的具体代码如下:


[cpp] view plain copy
  1. #include   
  2.   
  3. int main()  
  4. {  
  5.     cv::Mat image, image_gray;  
  6.     image = cv::imread("lenna.jpg", cv::IMREAD_COLOR);  
  7.     cv::imshow("lenna", image);  
  8.     cv::cvtColor(image, image_gray, cv::COLOR_BGR2GRAY);  
  9.     cv::imwrite("lenna_gray.jpg", image_gray);  
  10.     cv::waitKey(0);  
  11.     return 0;  
  12. }  
阅读(5116) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~