2010-06-24 102 views
1

我試圖在OpenCV中的一對視頻文件中處理每個幀,然後將結果幀寫入輸出avi文件。除了輸出視頻文件看起來很奇怪之外,一切正常,除了一張純色圖像之外,圖像會重複三次,並進行水平壓縮,因此所有三個副本都適合窗口。我懷疑作者期待的頻道數量出了問題,但我給它寫了8位單通道圖像。下面是與我初始化我videowriter設置:OpenCV - VideoWriter生成帶有「重複」圖像的視頻

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

有沒有人遇到從之前OpenCV的videowriter這個奇怪的輸出?我一直在用cvSaveImage檢查生成的幀,看看我的處理步驟是否創建了「三倍」圖像,但事實並非如此。只有當我用cvWriteFrame寫入輸出avi時,圖像纔會「三倍」並被壓縮。

編輯:所以我發現,這隻發生在我嘗試使用寫入幀編寫單通道圖像時。如果我編寫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函數頭如下: typedef結構CvVideoWriter CvVideoWriter CvVideoWriter * cvCreateVideoWriter(常量字符*文件名,INT FOURCC,雙幀,CvSize frame_size,INT is_color = 1) 我應該使用C++的樣式語法用於設置視頻編寫器而不是c風格的功能? – user375357 2010-06-24 17:51:48

+0

拍攝我剛剛注意到文檔說「(該標誌目前僅支持Windows)」。我使用的是linux,這是否意味着無法讓videoWriter接受灰度圖像? – user375357 2010-06-24 18:30:49

+2

明確的解決方案是通過簡單地將相同的值放入RGB通道來製作3C灰度圖像。 大多數視頻格式期望RGB(或HSV),而不是單通道 – 2010-06-24 19:09:37