和boost類庫一樣,ubuntu下也提供了opencv的二進制包,安裝非常簡單:
$ sudo apt-get install build-essential libgtk2.0-dev libavcodec-dev libavformat-dev libjpeg62-dev libtiff4-dev cmake libswscale-dev libjasper-dev $ sudo apt-get install libopencv-dev
我現在學習的是O’Reilly 的《Learning OpenCV》,書中是以1.0版本為例的。而我現在安裝的版本是2.3.1,其組織方式與1.0還是有很大的不同的。比如第一個例子里,使用highGUI是包含頭文件"highgui.h”,而我安裝好后find不到這個名字的頭文件,幾個默認包含路徑下也沒有其他類似vc.h之類的文件生成。仔細找了一下,原來是在/usr/include下生成了一個文件夾opencv2,而內部highgui,cv等模塊又用文件夾組織起來,還有一個頭文件是"opencv.hpp”,文件里包含了所有模塊的頭文件。查看內容可以發現,原先的"highgui.h"已經改成了"highgui_c.h",除此之外還多了一個"highgui.hpp"。感覺和boost庫的組織形式很像。記得前段時間還吐槽了java中包組織方式和文件系統的耦合,現在看這些現代c++庫組織,倒有種異曲同工的感覺。
然后又檢查了下/usr/lib,庫文件的命名方式如"libopencv_XXX.a/so"。加入"-l opencv_core –l opencv_highgui",第一個例子順利通過了編譯。下面奉上測試樣例:
// using lib: -l opencv_core -l opencv_highgui #ifdef OPENCV_v1 // if you're using version 1 #include "highgui.h" #else // or you can include "opencv2/highgui/highgui.hpp" "opencv2/core/core.hpp" #include "opencv2/opencv.hpp" #endif #include <iostream> #define Usage() \ { std::cerr << "Usage: ./showpic FILE" << std::endl; } int main(int argc, char** argv) { if (argc != 2) Usage(); IplImage* img = cvLoadImage(argv[1]); cvNamedWindow("Example1", CV_WINDOW_AUTOSIZE); cvShowImage("Example1", img); cvWaitKey(0); cvReleaseImage(&img); cvDestroyWindow("Example1"); }
