在FlyCapture2 c++ API中使用embeddedFrameCounter

Using embeddedFrameCounter in the FlyCapture2 C++ API

本文关键字:embeddedFrameCounter API FlyCapture2 c++      更新时间:2023-10-16

我想用Point Grey Research相机实现帧安全捕获。要做到这一点,我要检查是否有任何相机遗漏了任何帧。包装器类,我扩展这样做是使用FlyCapture 2 API,所以我想继续使用,如果可能的话。

关于这个问题的PGR FAQ只涉及旧的API和IEEE-1394相机(我使用的是USB 3.0)。我正在尝试使用以前通过ImageMetadata对象及其embeddedFrameCounter成员提供的uiSeqNum的帧计数功能。然而,它似乎总是0。

我想知道我是否犯了一个愚蠢的错误,或者如果它是一个bug。在任何情况下,如果您链接OpenCV和Flycapture所需的文件,则此代码应该运行。

#include<iostream>
#include"opencv2opencv.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);
}

作为题外话:在此捕获循环中改进内存管理的技巧值得赞赏。

好吧:你必须提前激活帧数,就像大多数(如果不是所有)其他嵌入图像元数据一样。你可以像这样使用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基本上提供了这个代码片段,更一般地提供了错误检查和多个相机。
相关文章:
  • 没有找到相关文章