1. 程式人生 > >關於cvCreateFileCapture以及cvCreateVideoWriter的avi讀寫方法(Xcode)

關於cvCreateFileCapture以及cvCreateVideoWriter的avi讀寫方法(Xcode)

Mac下用Xcode編譯OpenCV時avi檔案總會出問題,主要還是視訊編碼方式的原因,在此我來總結一下這兩個函式在Mac下的具體使用方法:

1、cvCreateFileCapture

使用格式:

    char name[]="/Users/sean/Documents/untitled folder/2.avi";
    CvCapture* capture = cvCreateFileCapture(name);

檔案路徑必須填寫完整,Xcode不用考慮轉義字元,能成功讀寫出來。

常見問題:avi檔案打不開

解決辦法:用視訊轉碼工具轉換成mac能識別的碼字,工具連線(連結: http://pan.baidu.com/s/1XZtSU 密碼: ny43)

使用方法:下載“soccer.avi”、“ha-virtualdub.zip”解壓,並開啟“VirtualDub.exe”。

(1)File--->open video file--->開啟“soccer.avi”;

(2)Video--->Compression--->選擇“Microsoft Video 1”--->OK;

(3) File--->save as AVI,接下來儲存好的就是解碼過的視訊啦,OpenCV能直接開啟。

2、cvCreateVideoWriter

使用格式:

CvVideoWriter* write = cvCreateVideoWriter
    (
     "/Users/sean/Documents/untitled folder/3.avi",
     CV_FOURCC('r', 'p', 'z', 'a'),
     fps,
     size
    );

同樣路徑需要完整。

常見問題:cvWriteFrame寫出的檔案大小隻有414kb

解決辦法:這個是由於write在建立的時候引數fourCC的使用不當造成的,此處必須使用mac支援的編碼方式才行,在此我來給出mac可用的編碼:


大部分都能用,畢竟現在QuickTime都到V.10了。

使用方法:

    CvVideoWriter* write = cvCreateVideoWriter
    (
     "/Users/sean/Documents/untitled folder/3.avi",
     CV_FOURCC('r', 'p', 'z', 'a'),
     fps,
     size
    );
    CvVideoWriter* re_write = cvCreateVideoWriter
    (
     "/Users/sean/Documents/untitled folder/re3.avi",
     CV_FOURCC('j', 'p', 'e', 'g'),
     fps,
     size
     );

只需改變CV_FOURCC後面的引數即可。

補充說明:

有人說安裝Xvid解碼器就能用了,不過個人嘗試後發現xcode對這個解碼器貌似不感冒,我來貼出官方連結(http://www.xvidmovies.com/codec/)畢竟這個code已經13年沒更新過了,可以下載下來看


還有人問網上下載的 “ .sit ” 檔案我打不開,正如我所說,這個檔案是2003年最後一次更新的,所以它是個相當老的一種壓縮方式,需要下載專門的解壓軟體來解壓

不想下軟體的可以去我的百度雲連線裡下載.zip檔案,我已經解壓好了。Xvid這個方法應該只對win奏效,mac新增的第三方編碼方式好像都不能在編寫OpenCV的時候使用,也有可能是我在Xcode工程選項中沒有配置好吧,若有人成功希望在評論中告訴我,我會繼續完善OpenCV在Mac中各項功能的使用。