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>¶ms=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/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。