Ho sviluppato un progetto di analisi delle immagini in tempo reale utilizzando C++ e OpenCV che richiedono l'estrazione di frame da una webcam. Sto incontrando problemi nel tentativo di estrarre questi frame con qualsiasi tipo di velocità - attualmente posso gestire solo circa 18 fps. Ecco il semplice codice che sto usando per estrarre fotogrammi da webcam:Estrazione veloce dei frame dalla webcam: C++ e OpenCV rispetto a Matlab
#include "opencv2/highgui/highgui.hpp"
#include <iostream>
#include <ctime>
using namespace std;
using namespace cv;
int main (int argc, char* argv[])
{
VideoCapture cap(0);
if(!cap.isOpened()) return -1;
namedWindow("video", CV_WINDOW_AUTOSIZE);
clock_t start = clock();
for (int i = 0; i < 101; ++i)
{
Mat frame;
cap >> frame;
imshow("video", frame);
waitKey(1);
}
clock_t finish = clock();
double time_elapsed = (finish - start)/1000.0;
double fps = 100/time_elapsed;
cout << "\n\nTIME: " << time_elapsed << "\n\nFPS: " << fps << "\n\n";
return 0;
}
Ho provato altri codici, ma nessuno mi permetta di estrarre i fotogrammi più veloce di 18 fps. Spero di raggiungere velocità simili a quello che posso ottenere in Matlab di 40 - 50 fps (utilizzando il seguente codice):
vid = videoinput('winvideo', 1, 'MJPG_640x480');
triggerconfig(vid, 'manual');
start(vid);
tic;
for k = 1:100;
clc;
disp(k);
I = peekdata(vid, 1);
imshow(I);
drawnow;
end
toc;
close();
stop(vid);
delete(vid);
Ho guardato utilizzando file mex per accelerare il mio progetto C++ e anche abilitando il supporto per GPU/CUDA ma ho riscontrato alcuni problemi hardware, quindi vedevo se c'è un approccio più semplice o qualcosa che mi manca nel mio codice corrente.
Grazie in anticipo!
EDIT Ho appena eseguito un'analisi delle prestazioni sul codice e c'è un paio di punti appiccicose e cioè:
VideoCapture cap(0); 10.5%
cap >> frame; 36.8%
imshow("video", frame); 31.6%
hai potuto testare il codice a http://answers.opencv.org/question/72386/how-to-get-fps-in-opencv-live -capture/fammi sapere se ci sarà qualche differenza. – sturkmen
Grazie per la risposta. Provare entrambi gli esempi nel tuo collegamento mi ha permesso solo di raggiungere una media di 15fps. – MSTTm
se si esegue la modalità di debug, provare la modalità di rilascio. – sturkmen