Tôi đang cố gắng ghi lại luồng video của Logitech C920 trong OpenCV. Với Labview tôi có thể truy cập luồng MJPG ở tốc độ 30fps 1080p. Trong opencv tôi bị giới hạn ở 5fps hoặc 640x480.Chụp 1080p ở tốc độ 30 khung hình/giây từ logitech c920 với openCV 2.4.3
Đây là mã có liên quan đến các thiết lập máy ảnh:
this->camRef.set(CV_CAP_PROP_FRAME_WIDTH, 1920);
this->camRef.set(CV_CAP_PROP_FRAME_HEIGHT, 1080);
this->camRef.set(CV_CAP_PROP_FOURCC,CV_FOURCC('M','J','P','G'));
Những tất cả trở lại 1, tuy nhiên tôi nhận được một dòng 5fps 1080p tương ứng với các dòng YUY2.
Nếu tôi thêm các dòng sau:
this->camRef.set(CV_CAP_PROP_FPS, 30);
này trả về 0. tôi nhận được một dòng 30 fps ở độ phân giải 640x480. Với tôi, có vẻ như cài đặt MJPG không được chấp nhận nhưng tôi không biết phải làm gì hoặc cách khắc phục điều đó.
CHỈNH SỬA: Sau đây là sự cố chương trình.
this->camRef.read(this->image);
std::cout<< this->camRef.get(CV_CAP_PROP_FOURCC) << std::endl;
std::cout<< this->camRef.set(CV_CAP_PROP_FRAME_WIDTH, config.width) << std::endl;
std::cout<< this->camRef.set(CV_CAP_PROP_FRAME_HEIGHT, config.height) << std::endl;
std::cout<< this->camRef.set(CV_CAP_PROP_FOURCC,CV_FOURCC('M','J','P','G')) << std::endl;
std::cout<< this->camRef.get(CV_CAP_PROP_FOURCC) << std::endl;
Sau đó trong mã chạy của tôi, tôi có như sau:
void camera::run()
{
while(true)
{
if(this->camRef.read(this->image) == 0)
{
if(this->capture)
{
cv::imwrite(fileName,this->image);
this->count++;
}
}
msleep(15);
}
}
EDIT2: Giải pháp là để thiết lập các codec fourCC trước khi thiết lập chiều cao của camera và chiều rộng.
nếu bạn muốn thiết lập fps (phải được hỗ trợ bởi máy ảnh), bạn phải làm điều đó sau khi thiết lập codec, nhưng trước khi chiều rộng/cài đặt độ cao – MartinM
Âm thanh như EDIT2 của bạn cung cấp cho bạn 1080p ở tốc độ 30 khung hình/giây. Nên được biến thành một câu trả lời và chấp nhận sau đó để làm cho vấn đề xuất hiện giải quyết. –