Linux 中使用 OpenCV
2012-11-17 00:50 Justany_WhiteSnow 阅读(18521) 评论(2) 编辑 收藏 举报修订记录
- 2012.11.20修订OpenCV 2.4+在CentOS安装方法。
- 2012.11.21添加OpenCV 2的打开图片的写法。
预备
- GCC
- CMake
- OpenCV
这些都可以在CentOS 6.0的“添加/删除软件”里面找到并安装。其他Linux版本可以选择用编译后安装或者在Rpmfind寻找二进制安装版本:
CentOS安装OpenCV 2.4+
- 下载OpenCV 2.4+压缩包解压到一个文件夹里,如:/home/me/opencv/
- 构建Makefile,在终端输入,进行构建:
cd /home/me/opencv/
cmake .
- 进行编译并安装,编译过程可能有些警告发生,请无视这些警告:
make
make check
make install
写一个OpenCV程序
新建一个简单的程序,例如:DisplayImage.cpp。
#include <stdio.h> #include <cv.h> #include <highgui.h> //使用cv这个命名空间 using namespace cv; /* 主函数 *C语言规定main函数只能有两个参数, *习惯上将这两个参数写成argc和argv。 *第一个代表(传参个数+1), *第二个代表传惨数据。 *一般有两种写法: *main( int argc, char* argv[]) *main( int argc, char** argv) */ int main( int argc, char** argv ) { //建立一个Mat类型的变量image Mat image; /* API中有: * C++: Mat imread(const string& filename, int flags=1 ) * 意思是返回Mat类型数据,第一个参数接受一个string类型的引用, * 第二个参数接受一个int类型的flags,一般都是1。 */ image = imread( argv[1], 1 ); //当传的参数不是一个,或者图片没有数据则提示没有图片并退出程序 if( argc != 2 || !image.data ) { printf( "没有该图片 \n" ); return -1; } //C++: void namedWindow(const string& winname, int flags=CV_WINDOW_AUTOSIZE ) namedWindow( "显示图片", CV_WINDOW_AUTOSIZE ); //C++: void imshow(const string& winname, InputArray mat) imshow( "显示图片", image ); //C++: int waitKey(int delay=0) waitKey(0); return 0; }
新的头文件写法
同样的程序,可以用新的头文件写法来写:
#include "opencv2/core/core.hpp" #include "opencv2/highgui/highgui.hpp" #include <stdio.h> using namespace cv; int main( int argc, char** argv ){ Mat image; image = imread( argv[1]); if( argc != 2 || !image.data ){ printf("没有图片\n"); return -1; } namedWindow( "显示图片", CV_WINDOW_AUTOSIZE ); imshow( "显示图片", image ); waitKey(0); return 0; }
创建一个对应的CMake文件
新建一个CMakeLists.txt,内容大概是这样的:
project( DisplayImage )
find_package( OpenCV REQUIRED )
add_executable( DisplayImage DisplayImage )
target_link_libraries( DisplayImage ${OpenCV_LIBS} )
生成可执行文件
cd <DisplayImage_directory>
cmake .
make
结果
生成了一个DisplayImage文件,所以运行这个文件,将文件路径传进去:
./DisplayImage lena.jpg
你就能看到图片了:
被山寨的原文
Using OpenCV with gcc and CMake . OpenCv.org