如何使用OpenCV加载图像(原始字节)?

时间:2014-02-01 12:39:33

标签: c++ opencv

我正在使用Mat input = imread(filename);来阅读图片,但我想从内存中取而代之。该文件的来源是来自HTTP服务器。为了使它更快,而不是将文件写入磁盘然后使用imread()从它读取,我想跳过一步并直接从内存加载它。我该怎么做呢?

已更新以添加错误

我尝试了以下但是我遇到了分段错误

char * do_stuff(char img[])
{
    vector<char> vec(img, img + strlen(img));
    Mat input = imdecode(Mat(vec), 1);
}

2 个答案:

答案 0 :(得分:2)

答案 1 :(得分:1)

我有类似的问题。我需要在内存中解码jpeg图像流,并使用Mat图像输出进行进一步分析。

OpenCV :: imdecode上的文档没有提供足够的信息来解决问题。

然而,OP的代码对我有用。这是我使用它的方式(在C ++中):

//Here pImageData is [unsigned char *] that points to a jpeg compressed image buffer;
//     ImageDataSize is the size of compressed content in buffer; 
//     The image here is grayscale; 

cv::vector<unsigned char> ImVec(pImageData, pImageData + ImageDataSize);
cv:Mat ImMat;
ImMat = imdecode(ImVec, 1); 

要检查我是否保存了ImMat,并且能够使用图像查看器打开图像文件。

cv::imwrite("opencvDecodedImage.jpg", ImMat);

我用过:x86上VC10的OpenCV 2.4.10二进制文件。 我希望这些信息可以帮助他人。