openCV学习——一、图像读取、显示、输出

 

一、Mat imread(const string& filename,int flags=1),用于读取图片

1、参数介绍

filename:载入的图片的路径名。支持windows位图(bmp,dib)、JPEG文件(.jpeg,.jpg,.jpe)、JPEG2000文件(.jp2)、PNG图片(.png)、便携文件格式(.pbm,.pgm,.ppm)、Sun rasters光栅文件(.sr,.ras)、TIFF文件(.tiff,.tif)

flags:表示载入标识,指定加载图像的颜色类型,默认为三通道彩色图像。

  常用标志符:

  • CV_LOAD_IMAGE_UNCHANGED——等价取值为-1
  • CV_LOAD_IMAGE_GRAYSCALE——等价取值为0,将图像转化为灰度
  • CV_LOAD_IMAGE_COLOR——等价取值为1,将图像转化为彩色
  • CV_LOAD_IMAGE_ANYDEPTH——等价取值为2,当载入图像深度为16位或32位,返回对应深度的图像,否则转化为8位图像返回
  • CV_LOAD_IMAGE_ANYCOLOR——等价取值为4,无损的源图像

 当输入有冲突时,采用较小数字值。CV_LOAD_IMAGE_COLOR|CV_LOAD_IMAGE_ANYCOLOR将载入三通道图;CV_LOAD_IMAGE_ANYDEPTH|CV_LOAD_IMAGE_ANYCOLOR将载入最真实无损的源图像。

  若以数值表示,则:

  • flags>0返回一个3通道的彩色图像
  • flags=0返回灰度图像
  • flags<0返回包含Alpha通道的加载图像

 当以彩色载入时,通道顺序为BGR(蓝、绿、红),而非RGB。

二、void imshow(const string& winname,InputArray mat),用于显示一副图像

1、参数介绍

winname:填需要显示的窗口标志名称

mat:填需要显示的图像

2、注意事项

如果窗口用CV_WINDOW_AUTOSIZE(默认值)创建的,那么imshow将显示图像原始大小,否则将进行缩放以适应窗口:

  • 如果图像为8位无符号类型,显示原来图像
  • 如果为16位无符号或32位整型,使用像素值除以256,将值的范围从[0,255*256]映射到[0,255]
  • 如果图像为32位浮点型,像素值乘以255.

如果窗口创建时设定支持OpenGL(WINDOW_OPENGL),则imshow还支持ogl::Buffer、ogl::Texture2D以及gpu::GpuMat作为输入。

三、void namedWindow(const string& winname, int flags=WINDOW_AUTOSIZE),用于创建窗口

1、参数介绍

name:填写窗口名称,将被用作窗口标志符

flags:窗口标志类型:

  • WINDOW_NORMAL,可改变窗口大小
  • WINDOW_AUTOSIZE(值为1),窗口大小会自动调整以适应所要显示的图像,且用户无法手动调整
  • WINDOW_OPENGL,窗口创建时将支持OpenGL

2、其他

可以自行手动关闭窗口并释放空间:destroyWindow()或destroyAllWindows()。但是程序退出时,所有窗口将被系统自动关闭。

四、bool imwrite(const string& filename, InputArray img,const vector<int>&params=vector<int>()),用于输出图像到文件

1、参数介绍

filename:填写要写入的文件名,需带上后缀,即文件类型名。

img:需要输出的图像,一般为Mat类型。

params:特定格式保存的参数编码,一般不需要填写。

  • 对于JPEG格式,参数从0到100,表示图片质量(CV_IMWRITE_JPEG_QUALITY)
  • 对于PNG格式,表示压缩级别(CV_IMWRITE_PNG_COMPRESSION)从0~9.较高的值意味着更小的尺寸和更长的压缩时间,默认为3.
  • 对于PPM、PGM或PBM格式,表示一个二进制格式标识(CV_IMWRITE_PXM_BINARY),取值为0或1,默认为1.

#include<opencv2/opencv.hpp>
#include<iostream>
int main(){
cv::Mat m1 = cv::imread("D:/640.jpg",4);
cv::namedWindow("windows",CV_WINDOW_AUTOSIZE);
cv::imshow("windows",m1);
std::cout << "rows" << m1.rows << std::endl;
std::cout << "cols" << m1.cols << std::endl;
std::cout << "chr" << m1.channels()<< std::endl;
std::cout << "deeepth" << m1.depth() << std::endl;
cv::waitKey(0);
return 0;
}

作者:萌萌的美男子 
出处:http://www.cnblogs.com/ivan-count/ 
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

openCV学习——一、图像读取、显示、输出的更多相关文章

  1. Python下的OpenCV学习 02 —— 图像的读取与保存

    OpenCV提供了众多对图片操作的函数,其中最基本的就是图片的读取与输出了. 一.读取图片 利用OpenCV读取一张图片是非常容易的,只需要用到 imread() 函数,打开shell或者cmd,进入 ...

  2. OpenCV学习:图像的载入和显示

    一.使用IplImage结构读取并显示图像文件: 运行结果: 二.使用Mat类读取并显示图像文件: 使用 Mat 类,内存管理变得简单,不再像使用 IplImage 那样需要自己申请和释放内存,而且一 ...

  3. OpenCV(C++版)图像读取,创建,复制,保存,显示

    http://blog.163.com/yuyang_tech/blog/static/21605008320132642254689/ 一个小例子: #include "stdafx.h& ...

  4. opencv学习笔记-图像叠加、混合

    在图像处理中,目标区域定义为感兴趣区域ROI(region of Interest),这是后期图像处理的基础,在获取ROI后,进行一些列的处理.ROI区域在Opencv中就是Rect,先构建Rect, ...

  5. opencv学习笔记-图像对比度、亮度调节

    在数学中我们学过线性理论,在图像亮度和对比度调节中同样适用,看下面这个公式: 在图像像素中其中: 参数f(x)表示源图像像素. 参数g(x) 表示输出图像像素. 参数a(需要满足a>0)被称为增 ...

  6. opencv3 学习三 - 图像输入输出显示等

    程序如下 #include "opencv2/opencv.hpp" using namespace cv; int main() { Mat file1 = imread(&qu ...

  7. opencv学习(一)——图像入门

    图像入门 一.读取图像 在opencv中使用cv.imread(filename, flags)函数读取图像.filename参数表示读取图像的路径.读取图像的路径应完整给出,且不能含有中文,否则在调 ...

  8. OpenCV基础篇之读取显示图片

    程序及分析 /* * FileName : read.cpp * Author : xiahouzuoxin @163.com * Version : v1.0 * Date : Tue 13 May ...

  9. opencv学习(六)——图像基本操作

    图像基本操作 一.访问和修改像素值 先来理解一下,图像与一般的矩阵或张量有何不同(不考虑图像的格式,元数据等信息).首先,一张图像有自己的属性,宽,高,通道数.其中宽和高是我们肉眼可见的属性,而通道数 ...

  10. OpenCV加载图像并显示

    从文件中读取一直一张图片,并加载出来 代码: #include "stdafx.h" #include "iostream" using namespace s ...

随机推荐

  1. rabbitmq简单实例

    JMS组件:activemq(慢)AMQP组件(advance message queue protocol):rabbitmq和kafka 一..消息队列解决了什么问题?异步处理应用解耦流量削锋日志 ...

  2. mysql表引擎myisam改为innodb

    1.进入数据库 2.SELECT  CONCAT('ALTER TABLE `', table_name, '` ENGINE=InnoDB;') AS sql_statements FROM    ...

  3. mysql 事务队列 写入 幂等性 重复写入

    mysql  事务队列   写入 幂等性  重复写入

  4. Only the storage referenced by ptr is modified. No other storage locations are accessed by the call.

    free - C++ Reference http://www.cplusplus.com/reference/cstdlib/free/ Data races Only the storage re ...

  5. stl, string不仅是charString, 更是byteString

     转载至:http://chzhou.blog.sohu.com/97459512.html 以前一直没有注意到STL中的string的length函数,但一直用它.天真的以为它会返回字符串的长度 ...

  6. Qt获取QObject对应的类名并把它转为真实类型(使用obj->metaObject()->className() )

    QObject是有窗口类的父类,比如QWidget,QLabel,QPushButton等都直接或间接继承自QObject类.如果把某个窗口中的所有控件都装到一个QList<QObject*&g ...

  7. 九九乘法表python3写入文件中

    写入文件代码如下: with open("e:\\test01.txt","w+",encoding="utf-8") as wq: for ...

  8. for in 循环

    for  in循环可以循环遍历数组  关键也可以循环遍历对象!而一般的for循环只能循环遍历数组, 当循环遍历对象时key值代表键值对的键,obj[key]则是对应键的值: 当循环遍历数组时,数组不是 ...

  9. 【PyQt5-Qt Designer】QSlider滑块

    QSlider滑块 QSlider简介 QSlider小部件提供了一个垂直或水平滑块. 滑块是控制有界值的经典控件.它允许用户沿水平或垂直凹槽移动滑块手柄,并将手柄的位置转换为合法范围内的整数值. Q ...

  10. oracle sqlplus login.sql设置

    sqlplus在启动时会自动运行两个脚本:glogin.sql.login.sql这两个文件 执行顺序为 1.默认在在$ORACLE_HOME/sqlplus/admin路径下查找glogin.sql ...