2015-09-24 3 views
0

Я использую камеру PS3 с opencv, она работает с типом данных PByte. Дает PByte в качестве результата кадра. В образцах SDK они используют IplImage. Я хочу использовать Mat вместо IplImage. Но я не могу преобразовать PByte в Mat. Как я могу преобразовать PByte в Mat? Пример В SDKПреобразование PByte в Mat OpenCV

 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); 
} 

ответ

1

Учитывая, что вы успешно преобразовали 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 
+0

я могу сделать это без использования pCapImage. Я просто хочу, чтобы pCapBuffer попал в Mat напрямую. Потому что в документации я вижу, что IplImage нуждается в управлении памятью manuel. – user1924375

+0

@ user1924375 Затем просто отпустите предыдущую память. Это просто. Проверьте обновленный ответ. – herohuyongtao

1

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

В этом случае временное решение

cv::Mat frame; 
frame = cv::cvarrToMat(pCapImage); 
+0

Могу ли я сделать это без использования pCapImage. Я просто хочу, чтобы pCapBuffer попал в Mat напрямую. Потому что в документации я вижу, что IplImage нуждается в управлении памятью manuel. – user1924375

Смежные вопросы