OpenCV學習筆記:opencv_highgui模塊


一,簡介

本模塊為跨平台的gui/IO組件,支持平台包括windows,linux,mac,IOS,android,可支持圖像/視頻/攝像頭的讀取顯示以及轉碼。

二,分析

本模塊為跨平台的gui/IO組件,包括如下圖所示文件:

opencv_highgui

------------------------------------------------------------------------------------------------------------------

頭文件:

ios.h,cap_ios.h ,  IOS平台相關事件,跳過分析;

highgui_c.h , C/C++兼容頭文件,定義了窗口控件相關的flag、實現函數;圖像輸入輸出顯示的相關函數;視頻攝像頭輸入輸出顯示的相關函數;

highgui.hpp , C++ only頭文件,定義了創建窗口的flag,窗口事件的flag,Qt窗口的flag,事件回調函數原型,以及窗口/控件操作相關的系列函數,openGL的包裝函數;圖像輸入輸出顯示的相關函數;視頻攝像頭輸入輸出顯示的相關函數,VideoCapture,VideoWriter;

------------------------------------------------------------------------------------------------------------------

實現文件:

grfmts/*.* 內含多種格式圖像的支持,grfmt_xxx.hpp/grfmt_xxx.cpp,可在此目錄中添加自定義/其他格式的圖像讀取保存支持;

cap.cpp , CvCapture操作相關的實現函數,可創建基於File或者camera的CvCapture;VideoCapture,CvVideoWriter操作相關的實現函數,可創建基於vfw,dshow,msMF,ffmpeg,gstreamer,quicktime,avfoundation等框架的視頻流文件,或者圖像文件;

cap_cmu.cpp , 基於cmu1394接口的camera於opencv的抽象實現,實現了一個基於cmu1394的CvCaptureCAM_CMU;

cap_dshow.cpp , 基於dshow框架的camera於opencv的抽象實現,定義了camera的枚舉,視頻幀的獲取等操作,實現了一個基於dshow的CvCaptureCAM_DShow;

cap_ffmpeg.cpp , 基於ffmpeg框架的camera於opencv的抽象實現,這個文件是ffmpeg與CvCapture,CvVideoWriter接口之間的一個代理,實際的實現在cap_ffmpeg_impl.cpp中,代理為CvCapture_FFMPEG_proxy和CvVideoWiriter_FFMPEG_proxy;

cap_ffmpeg_api.hpp,cap_ffmpeg_impl.cpp , 定義實現了CvCapture_FFMPEG,CvVideoWriter_FFMPEG,InputMediaStream_FFMPEG/OutputMediaStream_FFMPEG;

cap_images.cpp , 定義實現了基於圖像集的CvCapture_Images和CvVideoWriter_Images實現;

cap_vfw.cpp , 定義實現了基於vfw框架的camera於opencv的抽象實現CvCaptureAVI_VFW(僅用於AVI),CvCaptureCAM_VFW,CvVideoWriter_VFW;

loadsave.cpp , 定義了圖像codec集合;imread,imwrite,imencode,imdecode的實現;cvLoadImage,cvSaveImage,cvEncodeImage,cvDecodeImage的實現,此4個函數基於imread函數族;

precomp.cpp,precomp.hpp , 定義CvCapture,CvVideoWriter,以及一系列的create API;這個頭文件同時是類似於stdafx的預編譯頭文件;

utils.hpp/utils.cpp , 定義了BGR2Gray,Gray2BGR,BGRA2RGBA,CMYK2Gray等類型的函數(注:此處與imgproc中的顏色空間轉換不同,這里僅是RGB顏色空間中的相關調整操作),以及FillColorRow8等填充函數;

window.cpp  ,實現了窗口/控件/事件/回調的操作函數,包括win32(Windows),QT(跨平台),gtk(Linux),carbon(Mac)窗口系統的實現;

window_w32 ,windows平台的窗口/控件/事件/回調的實現;

window_QT.cpp,window_gtk.cpp,window_carbon.cpp,window_cocoa.mm 相應平台的窗口/控件/事件/回調的實現;

------------------------------------------------------------------------------------------------------------------

三,總結

OpenCV的gui/io組件可擴展性很好,支持平台多,結構清晰,實現簡單;缺點是這個模塊的名字highgui有點莫名其妙且包括io,C/C++代碼雜揉混亂。

此僅為一己之見,如有疑問/意見,歡迎在評論區留言。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM