代码改变世界

ubuntu下使用OpenCV

2013-01-07 01:14  robturtle  阅读(11003)  评论(1编辑  收藏  举报

和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");
}