Vấn đề là như sau Tôi muốn đọc một tập tin video từ đĩa và chuyển đổi nó mỗi khung thành màu xám và viết nó thành tập tin video mới Tôi đang sử dụng mã sau đây để làm như vậyOpenCV cvWriteFrame, cvWriteToAVI
CvCapture* capture = cvCreateFileCapture("/root/tree.avi");
if (!capture){
return -1;
}
...
CvVideoWriter* writer =
cvCreateVideoWriter("/root/output.avi",CV_FOURCC('D','I','V','X'),fps,size);
...
IplImage* gray_frame = cvCreateImage(
size,
IPL_DEPTH_8U,
1
);
while((bgr_frame=cvQueryFrame(capture)) != NULL) {
cvShowImage("Example2_10", bgr_frame);
cvCvtColor(bgr_frame,gray_frame,CV_RGB2GRAY);
cvShowImage("B&W result", gray_frame);
cvWriteFrame(writer, gray_frame);
char c = cvWaitKey(10);
if(c == 27) break;
}
...
Vấn đề là, chương trình chạy tốt, nhưng không thể ghi khung hình thành output.avi và chỉ tạo tệp output.avi trống chỉ 5.5KB
Một điều nữa là tôi không thể chỉ viết gra_frame bằng cvWriteFrame và nếu tôi cố gắng viết bgr_frame, nó sẽ ghi tập tin output.avi thành công.
Xin vui lòng nếu có ai biết giải pháp, cho tôi biết
Thật vậy. Lưu ý rằng chức năng này vẫn có thể bị thiếu trong Linux. tức là video sẽ ở chế độ màu bất kể tham số đó. Đó là một lỗi mà tôi gặp phải trong một thời gian trước đây, không chắc liệu nó đã được sửa chưa. – TaZ
Tôi có thể xác nhận điều này hoạt động trong Linux, chỉ cần sử dụng nó ngay bây giờ. – RyanfaeScotland