我想使用 Point Gray Research 相机实现帧安全捕获。为此,我想检查是否有任何相机丢失了任何帧。我为此扩展的包装类正在使用 FlyCapture 2 API,所以如果可能的话,我想继续使用它。
关于这个问题的PGR 常见问题解答仅涉及旧的 API 和 IEEE-1394 相机(我使用的那些使用 USB 3.0)。我正在尝试使用 uiSeqNum 之前通过 ImageMetadata 对象及其 EmbeddedFrameCounter 成员提供的帧计数功能。但是,它似乎总是为 0。
我想知道我是否在此过程中犯了一个愚蠢的错误,或者它是否是一个错误。在任何情况下,如果您链接 OpenCV 和 Flycapture 的必要文件,此代码应该会运行。
#include<iostream>
#include"opencv2\opencv.hpp"
#include"FlyCapture2.h"
int main() {
BusManager busMgr;
PGRGuid guid;
Camera cam;
Image rawImage, convertedimage;
busMgr.GetCameraFromIndex(0, &guid);
cam.Connect(&guid);
cam.SetVideoModeAndFrameRate(VIDEOMODE_640x480RGB,FRAMERATE_30);
cam.StartCapture();
IplImage* src_img;
while ((waitKey(30) > 0) == false) {
cam.RetrieveBuffer(&rawImage);
ImageMetadata metadata = rawImage.GetMetadata();
cout << "framecount: " << metadata.embeddedFrameCounter << endl;
rawImage.Convert(PIXEL_FORMAT_BGR, &convertedimage);
src_img = cvCreateImage(cvSize(rawImage.GetCols(),rawImage.GetRows()),IPL_DEPTH_8U,3);
memcpy(src_img->imageData, convertedimage.GetData(), convertedimage.GetDataSize());
cvShowImage("Test", src_img);
cvReleaseData(src_img)
}
waitKey(0);
}
顺便说一句:在此捕获循环中改进内存管理的技巧值得赞赏。