一、声明一个表示图像的变量,在OpenCV2中,这个变量是cv::Mat类型,该类是用于保存图像以及其余矩阵数据的数据结构。默认状况下它们的尺寸为0。数据结构
cv::Mat image; //这句话将建立一个宽高都为0的图像;函数
经过调用cv::Mat 的size()方法能够获取该图像的尺寸,该方法的返回值是一个结构体,包含着宽度和高度;ui
std::cout<<"size:"<<image.size().height<<","<<image.size().width<<std::endl;编码
cv::Mat类是用于保存图像以及其余矩阵数据的数据结构。默认状况下它们的尺寸为0,可是也能够指定初始尺寸:指针
cv::Mat ima(240,320,CV_8U,cv::Scalar(100));ip
同时,你须要指定矩阵中元素的类型,这里的CV_8U对应的是单字节的像素图像。字母U意味着无符号的(Unsigned).也可使用字母S声明带符号的(Signed)类型。对于彩色图像,须要指定3个通道(CV_8UC3)。也能够声明16位或32位的(无符号的或带符号的)整数图像,如CV_16SC3。也可声明32位或64位的浮点数,如CV_32F。内存
二、一个简单的读取函数将进行文件读取、解码以及内存的分配。it
image = cv::imread("img.jpg");gui
在使用该图像前须要先检查图像是否已经被正确读取,若是文件不存在、文件损坏或者格式没法识别,将会出现错误。检验方法以下:变量
if(!image.data){
//图像还没有建立.......
}
此处的成员变量data事实上是指向已分配的内存块的指针,包括图像数据。当不存在数据时,它被简单设置为0.
三、显示图像,OpenCV的highgui模块实现了该功能。首先定义一个须要进行图像显示的窗口,接着指定须要显示的图像:
cv::namedWindow("Original Image"); //定义显示图像的窗口,参数为窗口名
cv::imshow("Original Image",image); //显示图像
四、将图像水平反转。OpenCV中的多个图像变换能够在原地进行,即不建立新的图像,直接修改输入图像的内容。flip函数即是其中一种,然而,也能够建立另一个矩阵来保存输出结果。
cv::Mat result;
cv::flip(image,result,1); //正数表示水平反转,0表示垂直反转,负数表示既有水平也有垂直反转
结果显示在另外一个窗口中:
cv::namedWindow("Output Image");
cv::imshow("Output Image",result);
因为这是个控制台窗口,它会在main函数的结尾处终止,所以咱们添加额外的highgui函数使得程序退出前不停等待用户的按键输入:
cv::waitKey(0);
五、将处理后的图像保存在磁盘上,经过下面的highgui函数获得实现:
cv::imwrite("output.bmp",result);
文件的后缀名决定了图像保存时的编码格式。