OpenCV学习笔记:读取和写入图像文件
1.若想复制一个Mat对象的的内存内容,应该使用成员函数Mat::clone(),而不是使用赋值运算符(“=”),赋值运算符只是对其引用的复制。
2.OpenCV提供了代理类InputArray和OutputArray,允许数据类型(std::vector<>、Matx<>、Vec<>或Scalar)作为函数的参数使用。
3.Mat类可以存储实数或复数值向量和矩阵、彩色图像或灰度图像、直方图、点云(point cloud)。
4.Mat对象创建的构造函数法:
Mat(nrows,ncols,type,fillvalue)
实例:
Mat img_A(4,4,CV_8U,Scalar(255)); //具有8位无符号整数的4*4单个通道数组 255=白色
拓展: 数据类型的标识符如下
CV_<bit depth>{U|S|F}C(<number of channels>)
上面代码中,U、S、F分别代表unsigned、signed和float数据类型。
(注意:CV_8U、CV_8UC1和CV_8UC(1)是等价的。)
5.函数imread的原型如下:
Mat imread(const String& filename,int flags = IMREAD_COLOR)
其中,flag指定读取图像的颜色,取值如下:
IMREAD_UNCHANGED = -1 //8位,彩色或非彩色
IMREAD_GRAYSCALE = 0 //8位,灰度
IMREAD_COLOR = 1 //未改变深度、颜色
IMREAD_ANYDEPTH = 2 //任意深度、未改变颜色
IMREAD_ANYCOLOR = 4 //未改变深度,任意颜色
IMREAD_LOAD_GDAL = 8 //使用gdal驱动程序
6.读取输入的图像文件之后,应检查操作是否成功,可使用成员函数in_image.empty()来实现这个检查。
7.进行窗口创建的函数:
void namedwidows(const String& winname,it flags = WINDOW_AUTOSIZE)
其中,flag指定窗口类型,取值如下:
WINDOW_NORMAL = 0x00000000 //窗口大小可调整
WINDOW_AUTOSIZE = 0x00000001 //窗口大小不可调整,窗口的大小由显示的图像所限制
WINDOW_OPENGL = 0x00001000 //opengl支持的窗口
WINDOW_FULLSCREEN = 1 // ·
WINDOW_FREERATIO = 0x00000100 //图像可任意使用,调整图像时没有比例限制
WINDOW_KEEPRATIO = 0x00000000 //调整图像时保持图像的缩放比例
8.函数waitkey的原型如下:
int waitkey(int delay=0)
注:
(1)该函数在数毫秒内等待一个按键操作,并返回建的编码,如果延迟结束时没有按键则返回-1。如果delay是0或负数,那么函数一直等待直到一个键被按下。
(2)只有至少创建和激活一个窗口时,函数waitkey才会工作。
9.函数imwrite的原型如下:
bool imwrite(const String& filename,InputArray img,const vector<int>& params=vector<int>())