opencv — Использование внедренного фрейм-метра в API-интерфейсе FlyCapture2 C ++

Я хочу реализовать безопасный снимок с помощью камер Point Grey Research. Для этого я хочу проверить, пропущены ли какие-либо кадры какими-либо камерами. Класс-обертка, который я расширяю для этого, использует API-интерфейс FlyCapture 2, поэтому я хотел бы продолжать использовать его, если это возможно.

PGR FAQ по этому вопросу относится только к старым камерам 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);
}

В дополнение: советы по улучшению управления памятью в этом цикле захвата приветствуются.

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 в основном предоставляет этот фрагмент кода с проверкой ошибок и для нескольких камер.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]