前言
笔者环境:win10+vs2015+cmake3.8.2
介绍下4.0.0的新特性,沿用官网的说明:
在发布3.0版的近3.5年后,我们很高兴推出4.x系列的第一个稳定版本。
版本特性:
- OpenCV现在是C ++ 11库,需要兼容C++ 11标准的编译器。所需的最低CMake版本已提升至3.5.1。
- 很多OpenCV 1.x的C API已被删除
- 在核心模块中延续性(在XML,YAML或JSON中存储和加载结构化数据)已在C ++中完全重新实现,并且也去掉了C API。
- 添加了新的模块G-API,它可以作为非常高效的基于图形的图像处理流水线的引擎。
- dnn模块使用OpenVINO™工具包R4中的深度学习部署工具包(Deep Learning Deployment Toolkit)进行了更新。请参阅指南如何构建和使用支持DLDT的OpenCV。
- dnn模块现在包括实验性Vulkan后端,并支持ONNX格式的网络。
- 流行的Kinect Fusion算法已实现,并针对CPU和GPU(OpenCL)进行了优化
- QR图码检测器和解码器已添加到objdetect模块中
- 非常高效且高质量的DIS密集光流算法已从opencv_contrib转移到视频模块。
- 更多细节可以在之前的宣布中找到:4.0-alpha,4.0-beta,4.0-rc和更新日志
1、下载
在opencv的官网或者opencv的github上都可以下载,笔者在GitHub上下载。
打开opencv的GitHub,如下:
分别点进去,下载相对应的release版本。
下载完解压得到,下面开始编译(玩cv自己不会编译是不行的):
2、cmake编译
在opencv目录下,新建一个文件夹newbuild,接下来编译的结果将存放在这个目录下。
(1)cmake配置与生成
等待一段时间,
接下来添加contrib的module,点击generate
等待一段时间,generate done,所有的红色就会没有,否则只能重新生成了。
(2)vs编译生成install
打开newbuild下的的OpenCV.sln文件,
找到CmakeTargets下的install,右击 点击 生成,前面所有的步骤都是为了这一步,临门一脚啊。。。
生成大概15-20分钟左右,
。。。。。。
全部快成功了,居然有6个不通过,难受啊,秉着不抛弃不放弃的思想,重新来过吧。
但是重新来过还是有6个不通过,查了资料博客半天,有人说不影响使用,好吧,继续吧,我在这重复之前的步骤4遍,心塞ing。
(3)重新配置opencv,环境变量/依赖项等等
这里就驾轻就熟了,和以前的版本一样,
添加环境变量到path
然后打开vs2015,打开属性管理器,
点击Debug x64下的第一个,打开属性
包含目录为:install\include和install\include\opencv2,install是刚才上面生成的
然后是链接器下 输入
lib文件带d的是debug模式下的,没有就是release模式,笔者这里是debug模式下的,release没有编译,如过需要,和前面的步骤差不多。
附加的依赖项有点多(就是把D:\opencv4.0\opencv\buildx64\install\x64\vc14\lib 目录下的所有lib文件添加),这是我编译出来的
opencv_aruco400d.lib
opencv_bgsegm400d.lib
opencv_bioinspired400d.lib
opencv_calib3d400d.lib
opencv_ccalib400d.lib
opencv_core400d.lib
opencv_datasets400d.lib
opencv_dnn_objdetect400d.lib
opencv_dnn400d.lib
opencv_dpm400d.lib
opencv_face400d.lib
opencv_features2d400d.lib
opencv_flann400d.lib
opencv_fuzzy400d.lib
opencv_hfs400d.lib
opencv_highgui400d.lib
opencv_img_hash400d.lib
opencv_imgcodecs400d.lib
opencv_imgproc400d.lib
opencv_line_descriptor400d.lib
opencv_ml400d.lib
opencv_objdetect400d.lib
opencv_optflow400d.lib
opencv_phase_unwrapping400d.lib
opencv_photo400d.lib
opencv_plot400d.lib
opencv_reg400d.lib
opencv_rgbd400d.lib
opencv_saliency400d.lib
opencv_shape400d.lib
opencv_stereo400d.lib
opencv_stitching400d.lib
opencv_structured_light400d.lib
opencv_superres400d.lib
opencv_surface_matching400d.lib
opencv_text400d.lib
opencv_tracking400d.lib
opencv_video400d.lib
opencv_videoio400d.lib
opencv_videostab400d.lib
opencv_xfeatures2d400d.lib
opencv_ximgproc400d.lib
opencv_xobjdetect400d.lib
opencv_xphoto400d.lib
然后确定就行了。
(4)测试
新建工程-添加源文件-简单代码(sift特征检测)
代码如下:
#include <iostream>
#include <vector>
#include <opencv2/xfeatures2d.hpp>
#include <opencv2/xfeatures2d/nonfree.hpp>
#include <opencv2/highgui.hpp>
using namespace cv;
using namespace std;
int main()
{
Mat src = imread("F:/vs_test/lena.jpg");
if (src.data == NULL)
{
cout << "No exist" << endl;
return -1;
}
namedWindow("input image", WINDOW_AUTOSIZE);
namedWindow("output image", WINDOW_AUTOSIZE);
imshow("input image", src);
Ptr<Feature2D> sift = xfeatures2d::SIFT::create(400); //括号参数越大越精确,自定
vector <KeyPoint> keypointsa;
Mat a;
sift->detectAndCompute(src, noArray(), keypointsa, a); //得到特征点和特征点描述
drawKeypoints(src, keypointsa, src);//画出特征点
//显示
imshow("output image", src);
waitKey();
return 0;
}
结果:
结语:
从上面的结果看,确实没有影响,不过看到生成报告有几个失败难免不舒服,具体原因也不清楚,应该是网络的问题,版本的问题笔者觉得不是,笔者很认真的检查过,甚至还重新下了一遍。算了,不想了,心累。。。
基本大功告成,该去歇一歇了
不行,还是继续折腾吧,时间紧,任务重!!!