项目中遇到需要将uchar*数据流转换为Mat类型进行处理,以此记录一下。
一、cv::imdecode函数
Reads an image from a buffer in memory.
#include <opencv2/imgcodecs.hpp>
Mat cv::imdecode ( InputArray buf,
int flags
)
Mat cv::imdecode ( InputArray buf,
int flags,
Mat * dst
)
函数参数:
InputArray buf: 可以是Mat、Mat_<T>、Mat_<T, m, n>、vector<T>、vector<vector<T>>、 vector<Mat>等类型数据
int flag: 同imread的flag。
IMREAD_UNCHANGED | IMREAD_GRAYSCALE | IMREAD_COLOR IMREAD_ANYDEPTH | IMREAD_ANYCOLOR | IMREAD_LOAD_GDAL IMREAD_REDUCED_GRAYSCALE_2 | IMREAD_REDUCED_COLOR_2 IMREAD_REDUCED_GRAYSCALE_4 | IMREAD_REDUCED_COLOR_4 IMREAD_REDUCED_GRAYSCALE_8 | IMREAD_REDUCED_COLOR_8
IMREAD_IGNORE_ORIENTATION
Mat *dst: 指定读取后图像指针,可不用。
二、使用imdecode
因为imdecode函数不支持uchar*数据,所以使用前应将数据进行转换,这里我转为vector<unsigned char>类型。
unsigned char* pData;
unsigned int dataLen=100; //获取的数据流已知长度
vector <unsigned char> vec (pData,pData+datalen);
cv::Mat img=cv::imcode(vec,cv::IMREAD_COLOR);