在遵循 Canon EDSDK Reference 中的 SAMPLE 10 之后,这对我有用。这是一个更强大的解决方案的起点。
在 downloadEvfData 函数中,我用下面的代码替换了“显示图像”部分:
unsigned char *data = NULL;
EdsUInt32 size = 0;
EdsSize coords ;
// get image coordinates
EdsGetPropertyData(evfImage, kEdsPropsID_Evf_CoordinateSystem, 0, sizeof(coords), &coords);
// get buffer pointer and size
EdsGetPointer(stream, (EdsVoid**)&data);
EdsGetLenth(stream, &size);
//
// release stream and evfImage
//
// create mat object
Mat img(coords.height, coords.width, CV_8U, data);
image = imdecode(img, CV_LOAD_IMAGE_COLOR);
我还更改了函数签名:
EdsError downloadEvfData(EdsCameraRef camera, Mat& image)
在主要功能中:
Mat image;
namedWindow("main", WINDOW_NORMAL);
startLiveView(camera);
for(;;) {
dowloadEvfData(camera, image);
imshow("main", image);
if (waitkey(10) >= 0);
break;
}