做计算机视觉的朋友,估计没有人没用过OpenCV,著名的开源计算机视觉算法库。OpenCV还在不断发展中,最新的3.4版本,已经可以支持cnn了,以后估计会有集成更多的功能。 不过,由于知识产权的原因,OpenCV将很多算法放到了opencv_contrib中,在github上,这两块代码就是分别放在不同的repository中的。 OpenCV官方提供了windows可安装的版本,已经有编译好的dll,不过不包括opencv_contrib。如果想应用这部分算法,则需要自己编译opencv,将opencv_contrib编译到opencv中。以下简单介绍以下opencv在windows下编译的过程。 所需材料:
- opencv源代码
- opencv_contrib源代码
- cmake
- vs2015
- 一个通畅的网络(这点很重要~)
1.下载opencv源代码 源代码的地址是:https://github.com/opencv/opencv/,默认是master分支。其实都下载master分支,就可以。不过,为了清晰源代码版本,以后还能做到匹配,我选择了tags中的最新版本,3.4.1版本,地址是: https://github.com/opencv/opencv/tree/3.4.1 代码可通过git下载,用git clone命令即可。也可以在网页上点击Clone or download这个绿色按钮,然后点击download zip就可以。
2.下载opencv_contrib源代码 opencv_contrib代码地址是:https://github.com/opencv/opencv_contrib 3.4.1版本代码地址是:https://github.com/opencv/opencv_contrib/tree/3.4.1 相信大家也都发现规律了,参考下载opencv源代码方法即可。 下载后,解压代码到本地目录。 上图就是我解压的目录,其中有opencv和opencv_contrib的解压目录,还有一个build目录,用来放置cmake生成的vs工程。 3.安装cmake CMake是一个跨平台的编译工具,能够输出各种各样的makefile或者project文件。 下载地址:https://cmake.org/files/v3.11/cmake-3.11.3-win64-x64.msi 下载之后直接运行,默认安装即可。 4.用cmake生成vs工程 安装好cmake之后,运行cmake,先填写开头的两项 Where is the source code是opencv源码路径,即“源路径” Where to build the binaries是要生成opencv的vs工程路径,即“目的路径” 点击Configure,弹出对话框,选择编译工程的平台。我选的是64位的VS2015 点击Finish,即开始配置。这需要一定的时间,期间要下载一些依赖项,此时通畅的网络就起了关键作用,如果下载不全,可通过查看日志文件CMakeDownloadLog.txt手动下载。在完成第一次配置后,出现如下画面。 有很多红色选项,说明有问题,解决方法就是再点击一次Configure,这次快多了,出现下面画面。 全变白了,说明没问题了,这是需要做两项改动。 第一项是勾选BUILD_opencv_world选项,这样,在调用dll时,只调用这一个就行了,不用根据功能选择了,省了些麻烦。 这第二项,自然是在OPENCV_EXTRA_MODULES_PATH选项中,填写opencv_contrib解压目录下,modules文件夹的路径,这样就把opencv_contrib编译进去了。 然后再按Configure进行配置,和前面一样,一次红,二次白,不在赘述了。第二次全白了,就可以按Generate按键,生成vs工程文件了。 5.用VS2015编译opencv源代码 生成工程完毕,在刚才说的“目的路径”下,可以看到OpenCV工程文件 用vs2015打开工程文件,选择Debug x64,点击生成->生成解决方案开始编译,这个过程比较漫长,需要耐心,结果如下。 没有错误,然后右击INSTALL,点击“仅用于项目->仅生成INSTALL” 即可编译生成dll相关文件,编译过程如下。 然后将编译选项调整为Release x64,再重复一下以上的过程。此时在“目的路径”的install目录下,生成了调用dll的全部内容。 6.调用生成的dll实现图像处理功能 为了验证生成文件的有效性,新建工程,将库目录和包含目录指定到install文件夹下x64/vc14/lib和include文件夹。处理图片文标准测试图片house 测试代码如下:
#include "opencv2/opencv.hpp"
#include"opencv2/xfeatures2d.hpp"
#if _DEBUG
#pragma comment(lib,"opencv_world341d.lib")
#else
#pragma comment(lib,"opencv_world341.lib")
#endif
using namespace cv;
using namespace std;
int main(){
Mat img = imread("E:/PASCAL/OpenCV/house.jpg",CV_LOAD_IMAGE_COLOR);
Ptr<Feature2D> sift = xfeatures2d::SIFT::create();
vector<KeyPoint> keypoints;
Mat descriptors;
sift->detectAndCompute(img,noArray(),keypoints,descriptors);
drawKeypoints(img,descriptors,Scalar(0,255,255));
imshow("Result",descriptors);
waitKey(0);
return 0;
}
测试结果如下。 实现了contrib中sift特征点的提取。 (编辑:李大同)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|