代码之家  ›  专栏  ›  技术社区  ›  Richard Knop

cvShowImage错误

  •  0
  • Richard Knop  · 技术社区  · 14 年前

    好 啊。在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所需的一切。

    2 回复  |  直到 14 年前
        1
  •  1
  •   Yippie-Ki-Yay    14 年前

    CvArr* 是的typedef void*

    必须指定强制类型转换:

    csShowImage("Whatever", static_cast<CvArr*>(somePointer));
    

    还要注意 somePointer 是一个 指针。

    你可能会说

    IplImage object = matrix;
    IplImage* somePointer = &object;
    

    而且,我有点怀疑任意图像类型是否可以用矩阵类型替换。当你告诉你的程序 显示矩阵 ?

        2
  •  2
  •   bbrame    14 年前

    我想应该是:

    IplImage* fIplImageHeader = matrixJpeg;
    

    IplImage*和Mat*应该可以互换。