簡體   English   中英

將PByte轉換為Mat OpenCV

[英]Convert PByte to Mat OpenCV

我正在使用帶有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);
}

假設您已成功將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);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM