学习opencv 最开始一般都是从读取一张图片开始,在opencv 中我们可通过 imread() 来操作。首先我们看下imread 方法:
原型 Mat imread( const String& filename, int flags )
第一个参数 filename: 表示图像的路径。
第二个参数 flags:表示读取图像的方式。
IMREAD_UNCHANGED
= -1,表示读取原图, 不进行任何改变
IMREAD_GRAYSCALE = 0,表示以灰度图方式读取原图
IMREAD_COLOR = 1,表示以RGB方式读取原图
默认不加 flags 的话,表示不做改变读取原图。
enum ImreadModes {
IMREAD_UNCHANGED = -1, //如果设置,则返回的数据带有alpha通道(R,G,B,A 四个通道),否则没有alpha通道
IMREAD_GRAYSCALE = 0, //如果设置,则将图像转换为单通道灰度图像
IMREAD_COLOR = 1, //如果设置,则将图像转换成3通道BGR彩色图像
IMREAD_ANYDEPTH = 2, //如果设置,则在输入具有相应深度时返回16位/32位图像,否则将其转换为8位
IMREAD_ANYCOLOR = 4, //如果设置,则图像可能以任何颜色格式读取
IMREAD_LOAD_GDAL = 8, //如果设置,使用gdal驱动程序加载图像
IMREAD_REDUCED_GRAYSCALE_2 = 16, //如果设置,总是将图像转换为单通道灰度图像且图像大小减少1/2
IMREAD_REDUCED_COLOR_2 = 17, //如果设置,总是将图像转换为3通道BGR彩色图像且图像大小减少1/2
IMREAD_REDUCED_GRAYSCALE_4 = 32, //如果设置,总是将图像转换为单通道灰度图像且图像大小减少1/4
IMREAD_REDUCED_COLOR_4 = 33, //如果设置,总是将图像转换为3通道BGR彩色图像且图像大小减少1/4
IMREAD_REDUCED_GRAYSCALE_8 = 64, //如果设置,总是将图像转换为单通道灰度图像且图像大小减少1/8
IMREAD_REDUCED_COLOR_8 = 65, //如果设置,总是将图像转换为3通道BGR彩色图像且图像大小减少1/8
IMREAD_IGNORE_ORIENTATION = 128 //如果设置,不会根据EXIF的方向标志旋转图像
};
filename 图片路径编译器里面接受 单斜杆/, 双斜杆//, 以及反向双斜杆 \\。 不支持反向单斜杆\。
Mat SrcMat = imread("F:/build/test_app/correct.png"); // 单斜杆/
Mat SrcMat = imread("F://build//test_app//correct.png"); // 双斜杆//
Mat SrcMat = imread("F:\\build\\test_app\\correct.png"); // 反向双斜杆 \\
示例代码:
#include "stdafx.h"
#include <iostream>
#include <opencv2/imgproc/imgproc.hpp>
#include <opencv2/highgui/highgui.hpp>
using namespace cv;
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
Mat SrcMat = imread("F:\\build\\test_app\\correct.png", IMREAD_UNCHANGED);
//IMREAD_GRAYSCALE:原图做为灰度图加载
if(SrcMat.empty()) {
cout << "SrcMat.empty" << endl;
return -1;
}
imshow("image input", SrcMat);
waitKey(0);
return 0;
}