在FlyCapture2 C ++ API中使用embeddedFrameCounter

时间:2013-05-23 07:23:26

标签: c++ opencv computer-vision flycapture

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

PGR FAQ on this question仅指旧的API和IEEE-1394相机(我使用的是USB 3.0)。我试图通过ImageMetadata对象及其embeddedFrameCounter成员使用uiSeqNum先前提供的帧计数功能。但是,它似乎总是为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);
}

顺便说一下:我们赞赏有关改进此捕获循环中内存管理的提示。

1 个答案:

答案 0 :(得分:1)

好吧:你必须提前激活帧数,就像大多数其他嵌入式图像元数据一样。你可以像这样使用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基本上提供了此代码段,更常见的是错误检查和多个摄像头。