Tôi đã phát triển một dự án phân tích hình ảnh thời gian thực bằng cách sử dụng C++ và OpenCV yêu cầu các khung được trích xuất từ webcam. Tôi đang gặp sự cố khi cố gắng trích xuất các khung này ở bất kỳ tốc độ nào - hiện tại tôi chỉ có thể quản lý khoảng 18 khung hình/giây. Đây là mã đơn giản tôi đang sử dụng để trích xuất khung từ webcam:Trích xuất nhanh các khung hình từ webcam: C++ & OpenCV so với 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;
}
Tôi đã thử các mã khác nhưng không cho phép tôi trích xuất khung hình nhanh hơn 18 khung hình/giây. Tôi hy vọng sẽ đạt tốc độ tương tự như những gì tôi có thể đạt được trong Matlab của 40 - 50 fps (sử dụng đoạn mã sau):
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);
tôi đã xem xét sử dụng các file mex để tăng tốc độ ++ Dự án C của tôi và cũng cho phép hỗ trợ GPU/CUDA nhưng tôi đã gặp phải một số vấn đề về phần cứng vì vậy tôi đã nhìn thấy nếu có một cách tiếp cận đơn giản hơn hoặc thứ tôi đang thiếu trong mã hiện tại của mình.
Cảm ơn trước!
EDIT Tôi chỉ cần chạy một phân tích hiệu suất trên mã và có một vài điểm dính cụ thể là:
VideoCapture cap(0); 10.5%
cap >> frame; 36.8%
imshow("video", frame); 31.6%
bạn có thể kiểm tra mã tại http://answers.opencv.org/question/72386/how-to-get-fps-in-opencv-live -capture/cho tôi biết nếu có bất kỳ sự khác biệt nào. – sturkmen
Cảm ơn bạn đã trả lời. Việc thử cả hai ví dụ trong liên kết của bạn chỉ cho phép tôi đạt mức trung bình 15 khung hình/giây. – MSTTm
nếu bạn chạy chế độ gỡ lỗi, hãy thử chế độ phát hành. – sturkmen