我有一个字节数组,表示我想直接转换为OpenCV的垫目标.jpg文件。
我有这样的事情
byte* data; // Represents a JPG that I don't want to disk and then read.
// What goes here to end up with the following line?
cv::Mat* image_representing_the_data;
我有一个字节数组,表示我想直接转换为OpenCV的垫目标.jpg文件。
我有这样的事情
byte* data; // Represents a JPG that I don't want to disk and then read.
// What goes here to end up with the following line?
cv::Mat* image_representing_the_data;
前面提到的方法将正常工作,如果它的像素数据。
相反,如果你在内存中,标题,压缩,并且都具有一个整体JPG文件,它不会工作。
在这种情况下你想要的:
Mat img = imdecode(data);
这将做相同imread()
仅从存储器,而不是从一个文件名
作为@bob别说,这可以通过垫构造函数来完成。
byte *data;
cv::Mat imageWithData = cv::Mat(sizeOfData, 1, CV_8U, data).clone();
你创造了这个矩阵后,调用重塑与图像中的行数函数。
cv::Mat reshapedImage = imageWithData.reshape(0, numberOfRows);
cv::Mat GetImageFromMemory(uchar* image, int length, int flag)
{
std::vector<uchar> data = std::vector<uchar>(image, image + length);
cv::Mat ImMat = imdecode(data, flag);
return ImMat;
}
参数“标志”是指图像,灰度,颜色的类型,任何depht ..已定义的OpenCV