我想实现一个点灰色研究相机帧安全捕获。为了做到这一点,我想要检查是否有任何帧被任何相机遗漏。我扩展的包装器类使用的是FlyCapture 2API,所以如果可能的话,我想继续使用它。
PGR FAQ on this question只涉及旧的API和IEEE-1394摄像头(我使用的是USB3.0)。我正在尝试通过ImageMetadata对象及其embeddedFrameCounter成员使用uiSeqNum以前提供的帧计数功能。但是,它似乎总是为0。
我想知道我是不是犯了一个愚蠢的错误,或者这是一个bug。在任何情况下,只要链接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);
}顺便说一句:在这个捕获循环中改进内存管理的技巧是很有价值的。
发布于 2013-05-24 18:14:33
好的:你必须提前激活帧数,就像大多数其他嵌入的图像元数据一样。您可以像这样使用EmbeddedImageInfo对象(如果您在连接摄像头的调用之后插入以下代码行):
EmbeddedImageInfo EmbeddedInfo;
cam.GetEmbeddedImageInfo(&EmbeddedInfo);
if (EmbeddedInfo.frameCounter.available == true) {
EmbeddedInfo.frameCounter.onOff = true;
}
else {
cout << "Framecounter is not available!" << endl;
}
cam.SetEmbeddedImageInfo(&EmbeddedInfo);示例ExtendedShutterEx基本上提供了此代码片段,更一般地提供了错误检查和多摄像头。
https://stackoverflow.com/questions/16707929
复制相似问题