2014-04-03 26 views
9

Tôi đang tạo một chương trình trong OpenCV (2.4.8) sẽ đọc tệp video và thực hiện một số phép tính trên chúng. Đối với những tính toán này, tôi không cần các khung có độ phân giải cao, tôi hoàn toàn ổn định với độ phân giải 640 * 360.Thay đổi độ phân giải tệp video OpenCV

Trong các thử nghiệm đầu tôi đã webcam của tôi gắn liền và tôi đã sử dụng:

VideoCapture cap(0); 
cap.set(CV_CAP_PROP_FRAME_WIDTH, 640); 
cap.set(CV_CAP_PROP_FRAME_HEIGHT, 360); 
Mat image; 
cap.read(image); 
namedWindow("firstframe", 1); 
imshow("firstframe", image); 
waitKey(0); 

Những thay đổi kích cỡ hình ảnh hoàn hảo. Bây giờ tôi đang đi đến bước tiếp theo, nơi tôi muốn sử dụng chương trình của tôi cho video được lưu trữ thay vì một nguồn cấp dữ liệu trực tiếp (mà tôi đã sử dụng để thử nghiệm). Khi tôi thay đổi '0' bằng đường dẫn tệp nguồn (chuỗi), tệp được tải, nhưng độ phân giải vẫn là 1920 * 1080.

Tôi có làm gì sai không? Có cách nào để tải video ở độ phân giải thấp hơn 'đang di chuyển' không?

Tôi đã đọc tài liệu OpenCV. Một số cài đặt được gắn nhãn 'chỉ máy ảnh' nhưng cài đặt này không phải là: http://docs.opencv.org/modules/highgui/doc/reading_and_writing_images_and_video.html#videocapture-videocapture

Tôi đang sử dụng OpenCV trên mac và cài đặt nó bằng MacPorts.

Hãy cho tôi biết nếu cần thêm chi tiết.

Cảm ơn trước sự giúp đỡ của bạn

chỉnh sửa: Tôi đã nhận ra rằng cap.set (...) chức năng trả về một boolean, vì vậy tôi đã cố gắng in chúng ra và cả hai đều trở về 0 Điều này tất nhiên xác nhận rằng khung không được thay đổi kích cỡ. Vẫn không có đầu mối là tại sao ...

chỉnh sửa 2: Vì vậy, bây giờ, cho một giải pháp tạm thời tôi sử dụng dòng sau sau khi đọc (hình ảnh):

resize(image, image, Size(640, 360), 0, 0, INTER_CUBIC); 

Và công trình này. Nhưng tôi đoán đây không phải là giải pháp tối ưu nhất.

+0

khi bạn có webcam, bạn có thể đặt độ phân giải của hình ảnh đã mua, nhưng khi bạn tải video của mình có độ phân giải được mã hóa ở đó. Cách duy nhất tôi thấy là thay đổi kích thước hình ảnh như bạn đã làm. –

+0

Cảm ơn, tôi đã nghĩ về điều tương tự. Sự thay đổi độ phân giải có thể được thực hiện trong phần cứng trên webcam trực tiếp. Đoán của tôi là ffmpeg sẽ thay đổi kích cỡ khi đang chạy với tùy chọn này được bật. Nhưng sau đó một lần nữa, đó phải là cùng một tính toán khôn ngoan như tuyên bố thay đổi kích thước của tôi. – user3319803

Trả lời

8

sử dụng

resize(image, image, Size(640, 360), 0, 0, INTER_CUBIC); 

sau khi đọc (hình ảnh) có vẻ là giải pháp tốt nhất để giải quyết vấn đề này. Vì vậy, tổng số (kiểm tra) mã trở thành:

VideoCapture cap("path/to/file"); 
cap.set(CV_CAP_PROP_FRAME_WIDTH, 640); 
cap.set(CV_CAP_PROP_FRAME_HEIGHT, 360); 
Mat image; 
cap.read(image); 
resize(image, image, Size(640, 360), 0, 0, INTER_CUBIC); 
namedWindow("firstframe", 1); 
imshow("firstframe", image); 
waitKey(0); 

Nếu có ai biết cách tốt hơn, vui lòng cho tôi biết.

Các vấn đề liên quan