确定。在SO的帮助下,我设法将这些代码组合在一起。还有一个错误:
// ...
std::vector<char> jpegBuffer(lSize);
// copy the file into the buffer.
fread(&jpegBuffer[0], 1, jpegBuffer.size(), pFile);
// terminate
fclose (pFile);
Mat matrixJpeg = cv::imdecode(Mat(jpegBuffer), 1);
IplImage fIplImageHeader = matrixJpeg;
cvShowImage("Video", fIplImageHeader);
char key = cvWaitKey();
但是这个代码还有一个错误。就在这条线上:
cvShowImage("Video", fIplImageHeader);
错误是:
/home/richard/Desktop/richard/client/src/main.cc:106: error: cannot convert ‘IplImage’ to ‘const CvArr*’ for argument ‘2’ to ‘void cvShowImage(const char*, const CvArr*)’
根据文档,Mat和IplImage应该是可互换的,并且:
IplImage fIplImageHeader = matrixJpeg;
将Mat转换为IplImage所需的全部内容。
答案 0 :(得分:2)
我认为应该是:
IplImage* fIplImageHeader = matrixJpeg;
IplImage *和Mat *应该是可以互换的。
答案 1 :(得分:1)
CvArr*
是void*
您必须指定强制类型转换:
csShowImage("Whatever", static_cast<CvArr*>(somePointer));
另请注意,somePointer
是指针。
您可能会说
IplImage object = matrix;
IplImage* somePointer = &object;
另外,我有点怀疑任意图像类型是否可以用矩阵类型替代。当你告诉你的程序显示矩阵时,你愿意做什么?