opencv学习笔记——【OpenCV3】图像的读取、显示与保存

9人阅读 评论(0) 收藏 举报
分类:

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通道。

cv::Mat cv::imread(  
    const string& filename, // Input filename  
    int flags = cv::IMREAD_COLOR // Flags set how to interpret file  
    ); 

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

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


view plain copy
void cv::imshow(  
    const string& name, // Handle used to identify window  
    cv::InputArray image // Image to display in window  
);  

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;

bool cv::imwrite(  
    const string& filename, // Input filename  
    cv::InputArray image, // Image to write to file  
    const vector<int>& params = vector<int>() // (Optional) for parameterized fmts  
    ); 

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

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

实现的具体代码如下

#include <opencv2/opencv.hpp>  

int main()  
{  
    cv::Mat image, image_gray;  
    image = cv::imread("lenna.jpg", cv::IMREAD_COLOR);  
    cv::imshow("lenna", image);  
    cv::cvtColor(image, image_gray, cv::COLOR_BGR2GRAY);  
    cv::imwrite("lenna_gray.jpg", image_gray);  
    cv::waitKey(0);  
    return 0;  
} 

当然这只是将图片保存为图片格式,还可以保存为txt格式,以便于在MATLAB中处理。

查看评论

【OpenCV3图像处理】图像载入、显示、保存

图像载入 imread() 图像显示 imshow() 图像保存 imwrite()
  • u011574296
  • u011574296
  • 2017-04-10 21:01:55
  • 2703

【OpenCV3】图像的读取、显示与保存

OpenCV3中,图片的读取,通过函数cv::imread()来实现的;显示通过函数cv::imshow()来实现;而保存则通过cv::iimwrite()来实现。...
  • guduruyu
  • guduruyu
  • 2014-12-05 16:14:06
  • 10090

opencv3 学习笔记 图像与视频的转换

刚开始接触opencv3,发现函数的用法太多,本身C++学的也不是很好,打算随手把学过的记录下来,方便以后查看 1.读取图像:Mat imread(const string&amp;amp; fi...
  • u013539952
  • u013539952
  • 2017-05-01 13:59:56
  • 700

opencv3编程入门学习笔记-----图像的载入、显示和输出到文件

转自http://blog.csdn.net/hx1298234467/article/details/49072035 1.1,图像的载入:imread()函数 其作用是:读取图片到Mat类变量中。...
  • qingkongyeyue
  • qingkongyeyue
  • 2016-09-20 17:29:14
  • 701

Python3.5+OpenCV3.2读取图像问题

由于编码原因,opencv3.2无法用imread\imwrite直接读写含有中文字符的图像路径,因此读写要用以下2个方法: import cv2 as cimport numpy as npimg...
  • u010627377
  • u010627377
  • 2017-05-17 15:06:44
  • 873

opencv 图像的读取显示和保存

opencv图像处理系统组成(个人见解) 图像获取:本地加载图片(jpg,bmp,png) : 相机获取图像Frame Byte :...
  • xujaiwei
  • xujaiwei
  • 2017-05-31 21:25:29
  • 1088

opencv2 读取16bit图像数据小结

今天师弟跑来问我一个关于opencv图像值读取的问题, 原话是这样的 在opencv中想要加载一幅16位的图像,鼠标点击显示其位置和灰度数值,但是我写的程序中灰度数值最多只能显示255 拿到这个问...
  • zhyh1435589631
  • zhyh1435589631
  • 2015-10-20 13:06:22
  • 3728

OpenCV实用程序:“OpenCV相机”——获取、保存选定时刻的摄像头图像

该程序是用于获取、保存选定时刻的摄像头图像的程序,可用于采集特征匹配算法所需的模板。博主原本想写以并行方式实时截取图像的摄像头图像获取程序,但因对并行的了解有限,网上资料较少,暂时只写出了这个通过中断...
  • m0_37857300
  • m0_37857300
  • 2018-01-11 21:46:49
  • 194

OpenCV摄像头保存视频和图像

OpenCV摄像头保存视频和图像
  • jacke121
  • jacke121
  • 2017-01-19 00:24:45
  • 1326

OpenCV在MFC图像控件内显示图像

1.按照文章《OpenCV+MFC显示图像》,完成配置。2.创建相应的图像控件,按钮控件。3.进行类型转换。在当前OpenCV2版本内,图像格式为cv::Mat ,而该格式无法直接在MFC内显示。因此...
  • superdont
  • superdont
  • 2014-04-26 21:14:48
  • 17310
    个人资料
    持之以恒
    等级:
    访问量: 2万+
    积分: 1517
    排名: 3万+
    最新评论