我在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);
}
最佳答案
如果您使用的是OpenCV 3,则不建议使用IPlImage。因此,@ herohuyongtao的答案将不起作用。
在这种情况下,解决方法是
cv::Mat frame;
frame = cv::cvarrToMat(pCapImage);