Конвертировать PByte в Mat OpenCV

Я использую камеру PS3 с opencv, она работает с типом данных 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);
}

2 ответа

Учитывая, что вы успешно конвертировали PBYTE в IplImage *, вы можете преобразовать его в cv::Mat следующее:

IplImage *pCapImage;  // this is the IplImage * that you have converted from PBYTE 
cv::Mat pCapImageMat(pCapImage);
cvReleaseImage(&pCapImage); // free the previous memory

Если вы используете OpenCV 3, IPlImage устарела. Так что @herohuyongtao ответ не сработает.

В этом случае обходной путь

cv::Mat frame;
frame = cv::cvarrToMat(pCapImage);
Другие вопросы по тегам