转换一个字节ARRY到OpenCV的图像中的C ++(Convert a byte arry to

2019-06-27 08:43发布

我有一个字节数组,表示我想直接转换为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;

Answer 1:

前面提到的方法将正常工作,如果它的像素数据。

相反,如果你在内存中,标题,压缩,并且都具有一个整体JPG文件,它不会工作。

在这种情况下你想要的:

Mat img = imdecode(data);

这将做相同imread()仅从存储器,而不是从一个文件名



Answer 2:

作为@bob别说,这可以通过垫构造函数来完成。

byte *data;
cv::Mat imageWithData = cv::Mat(sizeOfData, 1, CV_8U, data).clone();

你创造了这个矩阵后,调用重塑与图像中的行数函数。

cv::Mat reshapedImage = imageWithData.reshape(0, numberOfRows);


Answer 3:

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



文章来源: Convert a byte arry to OpenCV image in C++