關於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中各項功能的使用。