OpenCV是目前常用且应用于多平台的机器视觉处理库,下面介绍在Windows及Linux平台下编译及使用OpenCV。
获取源码:
在OpenCV官网选择自己需要的版本 https://opencv.org/releases.html 点击对应版本的Sources即可下载到源码并解压,这里也可以选择pack版下载,虽然不用编译,但有环境使用限制。以源码形式获取,我们可以在不同环境下编译使用。
源码编译及使用:
Windows平台:
下载编译所需的工具CMake,可在官网 https://cmake.org/download/ 选择对应版本下载。
解压CMake,点击bin文件夹下的 cmake-gui.exe
在gui中配置编译相关信息
点击下面的Configure按钮,会让我们选择生成解决方案的工具版本
(本机安装的是VS2013,所以选择该选项,具体按需选择)
点击Finish后回到原来界面,等进度条走完后你会看到在Name和Value处多了很多选择,而且都是
红色的,这里可对各个选项进行勾选或取消。
再次点击Configue,可以看到之前红色区域都变为白色(每次修改选项后要先点击Configue)
这时再点击Generate按钮,等进度条走完后即生成了解决方案,我们可以在生成目录下看到VS的OpenCV工程。
打开该解决方案,右键CMake Targets下的INSTALL,选择"生成"
编译完成后在install文件夹下可以看到相应的头文件以及.lib、.dll文件
注:其中.d后缀为Debug模式下编译的,非.d后缀为Release模式下编译的。
VS下使用OpenCV:
首先将前面OpenCV生成的动态链接库路径(.dll)添加到系统的环境变量中,新建一个控制台应用程序,选择解决方案资源管理器->项目名->右键属性->配置管理器,由于我编译出来的库是x86平台下的,所以默认就行,要是以x64平台编译出来的,就新建一个活动解决方案平台,选择x64。
回到属性界面,将OpenCV的头文件目录包含进工程
将OpenCV的库目录包含进工程
添加依赖项,将OpenCV编译出来的库名字添加进来(可以按需添加)
添加预定义
相关环境已准备就绪了,下面可以直接编写程序了,
#include
#include
using namespace std;
using namespace cv;
int main(int argc, char* argv[])
{
Mat img = imread("test.jpg");
if (img.empty())
{
cout << "read image error!" << endl;
return 1;
}
imshow("image", img);
waitKey();
return 0;
}
在工程目录下添加test.jpg,运行程序后可以看到
Linux平台(Ubuntu、Debian):
相比Windows平台下,Linux中少去很多图形界面的操作,在开始编译OpenCV之前,最好先更新一下软件源
sudo apt-get update
依次安装如下依赖项,可能有些依赖项系统已经安装好了,或者提示你安装更新后的依赖项
sudo apt-get install build-essential
sudo apt-get install cmake
sudo apt-get install libgtk2.0-dev
sudo apt-get install pkg-config
sudo apt-get install python-dev python-numpy
sudo apt-get install libavcodec-dev libavformat-dev libswscale-dev libjpeg-dev libpng-dev libtiff-dev libjasper-dev
安装完后,将OpenCV的源码压缩包解压出来,进入源码目录,在目录中新建一个名为release的文件夹。
mkdir release
cd release
使用cmake工具在该文件夹中生成makefile文件,指定OpenCV的安装目录为/usr/local。
cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local ..
编译源代码并安装
make
......
sudo make install
更新搜索动态链接库
sudo ldconfig
在编译及安装的步骤完成后,我们就可以在/usr/local下看到OpenCV相关的头文件和库
编写程序进行测试
test.cpp
#include
using namespace std;
using namespace cv;
int main(int argc, char* argv[])
{
Mat img = imread("test.jpg");
if (img.empty())
{
cout << "read image error!" << endl;
return 1;
}
imshow("image", img);
waitKey();
return 0;
}
makefile
SOURCES = test.cpp
INCLUDE = $(shell pkg-config --cflags opencv)
LIBS = $(shell pkg-config --libs opencv)
OBJECTS = $(SOURCES:.cpp=.o)
TARGET = test
$(TARGET) : $(OBJECTS)
g++ -o $(TARGET) $(OBJECTS) -I $(INCLUDE) $(LIBS)
$(OBJECTS) : $(SOURCES)
clean:
rm $(OBJECTS) $(TARGET)
编译并运行
Qt下使用
不管是在Windows上还是Linux上,在Qt下使用OpenCV的方法都类似,都是将编译好后相关的头文件以及库的路径添加进工程的.pro文件下
如果使用的是Qt(MinGW),参考上面CMake使用,设置好编译器后,将 WITH_QT和 WITH_OPENGL 勾选上,以提供相关支持(VS版则不用勾选WITH_QT,否则程序运行时可能出现找不到Qt相关.dll文件)
生成makefile文件后打开 cmd 进行编译,将路径转到makefile所在路径下,输入 mingw32-make 命令开始编译。
编译完成后接着输入 mingw32-make install 进行安装。