0

我正在使用带有 opencv 的 PS3 相机,它适用于 PByte 数据类型。将 PByte 作为帧结果。在 SDK 示例中,他们使用 IplImage。我想使用 Mat 而不是 IplImage。但我无法将 PByte 转换为 Mat。如何将 PByte 转换为 Mat?SDK 中的示例

     IplImage *pCapImage;
    PBYTE pCapBuffer = NULL;
    cvGetImageRawData(pCapImage, &pCapBuffer);
    while(_running)
        {
            cvGetImageRawData(pCapImage, &pCapBuffer);
            CLEyeCameraGetFrame(_cam, pCapBuffer, (i==0)?2000:0);
}
//Function from SDK

IMPORT(bool) CLEyeCameraGetFrame(CLEyeCameraInstance cam, PBYTE pData, int waitTimeout = 2000);

//MyCode //我使用 2 个摄像头。

    cv::Mat pCapImage[2];
    PBYTE pCapBuffer = NULL;
    while(_running){

        for (int i = 0; i < 2; i++)
                {
                                  //trying convert
                    pCapImage[i] = cv::Mat (cvSize(w, h), 4, &pCapBuffer,IPL_DEPTH_8U).clone();

                    CLEyeCameraGetFrame(_cam[i], pCapBuffer);
                }

                Mat pCapImageMatL = pCapImage[0];
                Mat pCapImageMatR = pCapImage[1];
                imshow(_windowNameL, pCapImageMatL);
                imshow(_windowNameR, pCapImageMatR);
}
4

2 回答 2

1

如果您使用的是 OpenCV 3,则不推荐使用 IPlImage。所以@herohuyongtao 的回答是行不通的。

在这种情况下,解决方法是

cv::Mat frame;
frame = cv::cvarrToMat(pCapImage);
于 2015-09-28T19:29:33.040 回答
1

鉴于您已成功转换PBYTEIplImage *,您可以将其进一步转换cv::Mat为:

IplImage *pCapImage;  // this is the IplImage * that you have converted from PBYTE 
cv::Mat pCapImageMat(pCapImage);
cvReleaseImage(&pCapImage); // free the previous memory
于 2015-09-25T01:21:12.427 回答