我正在使用PS3摄像头和opencv它可以使用PByte数据类型。给PByte作为帧结果。在SDK样本中他们使用IplImage.I想使用Mat而不是IplImage.But我不能将PByte转换为Mat.How我可以转换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);
}
答案 0 :(得分: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
答案 1 :(得分:1)
如果您使用的是OpenCV 3,则不推荐使用IPlImage。所以@herohuyongtao回答没有工作。
在这种情况下,解决方法是
cv::Mat frame;
frame = cv::cvarrToMat(pCapImage);