我正在使用Mat input = imread(filename);
来阅读图片,但我想从内存中取而代之。该文件的来源是来自HTTP服务器。为了使它更快,而不是将文件写入磁盘然后使用imread()从它读取,我想跳过一步并直接从内存加载它。我该怎么做呢?
已更新以添加错误
我尝试了以下但是我遇到了分段错误
char * do_stuff(char img[])
{
vector<char> vec(img, img + strlen(img));
Mat input = imdecode(Mat(vec), 1);
}
答案 0 :(得分:2)
请参阅imdecode()的手册页。 http://docs.opencv.org/modules/highgui/doc/reading_and_writing_images_and_video.html#imdecode
答案 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二进制文件。 我希望这些信息可以帮助他人。