2010-06-24 6 views
1

OpenCV에서 한 쌍의 비디오 파일에서 각 프레임을 처리 한 다음 결과 프레임을 출력 avi 파일에 쓰려고합니다. 출력 비디오 파일이 이상하게 보이는 것을 제외하면 모든 것이 작동합니다. 하나의 솔리드 이미지 대신 이미지가 세 번 반복되고 수평으로 압축되어 세 개의 사본이 모두 창에 맞습니다. 작가가 기대하는 채널 수에 문제가있는 것 같지만 8 비트 단일 채널 이미지를 쓰려고합니다.OpenCV - VideoWriter는 "반복 된"이미지가있는 비디오를 만듭니다.

//Initialize the video writer 
    CvVideoWriter *writer = cvCreateVideoWriter("out.avi",CV_FOURCC('D','I','V','X'), 30, frame_sizeL, 0); 

사람이 전에에서 OpenCV videowriter에서이 이상한 출력을 발생했습니다 : 아래에있는 내 videowriter를 초기화하고있어 설정인가? 내가 어떻게 든 내 처리 단계가 "tripled"이미지를 생성하는지 확인하기 위해 cvSaveImage를 사용하여 결과 프레임을 확인했지만 그럴 수는 없습니다. cvWriteFrame을 사용하여 출력 avi에 쓸 때만 이미지가 "3 배가되고"압축됩니다.

편집 : 그래서 이것은 쓰기 프레임을 사용하여 단일 채널 이미지를 쓰려고 할 때만 발생한다는 것을 발견했습니다. 3 채널 8 비트 RGB 이미지를 쓰면 출력 비디오가 잘 나옵니다. 왜이 일을하는거야? CvVideoWriter를 초기화 할 때 색상 인수에 정확하게 "0"을 전달하므로 단일 채널 이미지가 필요합니다.

답변

0

C++ 버전에서는 마지막 매개 변수를 "false"로 설정하여 단일 채널 이미지를 보내고 있다고 cv :: VideoWriter에 알려야합니다.이 작업을 수행하고 있습니까?

편집 : 또는 당신은 내가 그렇게 생각 cvtColor() 및 CV_GRAY2RGB

+0

를 사용하여 색상을 그레이 스케일 이미지를 변환 할 수 있습니다. cvCreateVideoWriter의 마지막 인수는 컬러 이미지를 기대하는지 여부를 알려줍니다. 나는 확실히 여기에 보이는 마지막 인자에 0을 전달하고있다. cvCreateVideoWriter ("out.avi", CV_FOURCC ('D', 'I', 'V', 'X'), 30, frame_sizeL, 0); 다음 cvCreatevideoWriter 대한 함수 헤더는 다음 타입 정의 구조체 CvVideoWriter의 CvVideoWriter의 CvVideoWriter * cvCreateVideoWriter (CONST CHAR * 파일명의 INT FOURCC 이중 FPS, CvSize frame_size, INT is_color = 1) I는 C를 사용해야 ++ 스타일 구문 C 스타일의 함수 라기보다는 비디오 라이터를 설정하기 위해서? – user375357

+0

촬영 설명서에 "(이 플래그는 현재 Windows에서만 지원됩니다.)"라는 메시지가 나타났습니다. 저는 리눅스를 사용하고 있습니다. 그렇기 때문에 비디오 라이터가 그레이 스케일 이미지를 받아들이게 할 방법이 없습니다. – user375357

+2

시선을 사로 잡는 해결책은 단순히 RGB 채널에 같은 값을 넣음으로써 3C 그레이 스케일 이미지를 만드는 것입니다. 대부분의 비디오 형식은 단일 채널이 아닌 RGB (또는 HSV)를 필요로합니다. –