詳解在 Qt 程序中使用OpenCV
在 Qt 程序中使用OpenCV是本文要介紹的內容,OpenCV是一個基于BSD許可證授權(開源)發行的跨平臺計算機視覺庫,可以運行在Linux、Windows和Mac OS操作系統上。它輕量級而且高效——由一系列 C 函數和少量 C++ 類構成,同時提供了Python、Ruby、MATLAB等語言的接口,實現了圖像處理和計算機視覺方面的很多通用算法。[
OpenCV安裝
關于OpenCV的安裝,參考:
http://opencv.willowgarage.com/wiki/InstallGuide
安裝文檔寫得無比詳細, 這里就不贅述了。 簡單來說就是安裝CMake,然后用cmake命令去配置和編譯。
最簡單的命令是 “cmake .”。 這一步應該不算一帆風順, 筆者遇到了gstreamer頭文件找不到的問題。 在OpenCV的代碼里搜索一番沒找到gstreamer的頭文件目錄在哪里配置, 而筆者對cmake又非常不熟悉, 只好用了個土方法, 在/usr/include下給本機的gstreamer目錄建了個link到OpenCV使用的gstreamer路徑。 OpenCV使用的gstreamer路徑在生成的Makefile里提到了, 是/usr/include/gstreamer-0.10, 這個路徑是從哪兒得到的這一點很神奇…誰要是知道的請不吝賜教啊。 筆者電腦中的路徑則為/usr/inlcude/gstreamer-0.10-a, 故建立鏈接如下:
- ln -s /usr/include/gstreamer-0.10-a /usr/include/gstreamer-0.10
代碼例子
OpenCV里帶了很多的sample, 在samples目錄下, 其中一個引起了筆者的注意, 那就是samples/cpp/Qt_sample。 簡單看了看代碼, OpenCV里已經實現了和Qt的集成, 里面用Qt的API寫了widget,可以直接把攝像頭取得的內容顯示在Qt的widget里。
但這個例子工程似乎并沒有做好, 編譯過程實在是太曲折了, 到目前還沒找到方法編譯成功, 報的錯誤是undefined reference。 第一個遇到的問題是默認的編譯選項不會去編譯samples目錄, 為了尋找合適的編譯選項頗費了點腦筋(因為筆者對cmake基本上可以說是一竅不通的…汗)。 嘗試單獨編譯samples目錄, 失敗了, 報了個莫名其妙的cmake版本的問題。
估計是有些依賴的東西是需要頂層目錄里讀取的。 繼續查找相關的腳本和配置, 發現CMakeList.txt里提到了一個BUILD_EXAMPLES變量, 當此變量為真值時會編譯samples目錄。 但筆者絞盡腦汁也沒想出來怎么才能從外部配置這個值, 是用環境變量? cmake參數? 都試了, 沒一個管用的。 找來找去發現了OpenCV的文檔里有個例子,說明了如何設置變量,是在cmake的命令行傳入 -D BUILD_EXAMPLES=ON這樣的方式。 如此一來build整個工程時就會自動為samples目錄創建Makefile。所以configure的命令變成:
- cmake -D BUILD_EXAMPLES=ON .
生成的例子都在OPENCV_DIR/bin下,大家可以運行看看。(不包括Qt_sample這個例子)
在Qt中使用OpenCV
Qt程序要想用OpenCV的函數需要將opencv的頭文件和庫在工程pro文件里配置一下,添加INCLUDEPATH和LIBS,具體的方法參考:
http://www.opencv.org.cn/index.php/%E5%9C%A8Qt%E4%B8%AD%E4%BD%BF%E7%94%A8OpenCV%E5%BA%93
另外有一篇更實用更詳細的文章, 還提供幾個很好的例子, 是絕佳的參考。 大家有問題就仔細看這篇文章, 一般都能得到解答:
http://code.google.com/p/qt-opencv-multithreaded/wiki/Documentation
小結:關于詳解在 Qt 程序中使用OpenCV的內容介紹完了,希望本文對你有所幫助。更多相關內容請參考編輯推薦。