Tôi có một vòng lặp để chụp ảnh từ một khung hình tốc độ cao ở tốc độ 250 khung hình/giây.Hiển thị hình ảnh trong chuỗi thứ hai, OpenCV?
/** Loop processes 250 video frames per second **/
while(1){
AcquireFrame();
DoProcessing();
TakeAction();
}
Đồng thời, tôi muốn người dùng có thể theo dõi những gì đang diễn ra. Người dùng chỉ cần xem hình ảnh ở khoảng 30 khung hình/giây (hoặc ít hơn). Làm cách nào để thiết lập chuỗi thứ hai hiển thị khung hình hiện tại thường xuyên như vậy?
Thread(){
cvShowImage();
Wait(30); /** Wait for 30 ms **/
}
Tôi đang dùng Windows trên máy lõi tứ Intel sử dụng MinGW, gcc và OpenCV 1.1. Các tiêu chí chính là chuỗi hiển thị phải mất ít thời gian nhất từ vòng lặp xử lý chính của tôi càng tốt. Mỗi mili giây đều tính.
Tôi đã thử sử dụng CreateThread()
để tạo chủ đề mới với cvShowImage()
và cvWaitKey()
nhưng apparently those functions are not threadsafe.
Tôi đang xem xét sử dụng OpenMP, nhưng một số người là report problems with OpenMP and OpenCV. Tôi cũng đang xem xét cố gắng sử dụng DirectX directDraw vì dường như nó rất nhanh. nhưng nó looks complicated và rõ ràng là có problems using Windows DLL's with MinGw.
Đường nào trong số những con đường này sẽ là nơi tốt nhất để bắt đầu?
Không phải chỉ đủ để sử dụng điều kiện if và biến "đếm" tối đa 250 để hiển thị mọi lần chụp thứ 8 (250/30)? –
Ah vâng. Nhưng nếu bạn làm điều đó, thì toàn bộ chương trình sẽ dừng lại trong khi bạn hiển thị lần chụp thứ 8. Phải mất ~ 10 ms để hiển thị hình ảnh bằng cvShowImage. Lúc đó bạn đã bỏ lỡ một vài khung hình. – AndyL
Bạn có nhận được 250 fps từ máy ảnh không? Nếu bạn có thể cho tôi biết bạn đã làm như thế nào? Điều đó cực kỳ nhanh. – bakalolo