先看看opencv4的新特性吧!

1.OpenCV 最开始开发时的语言是 C,许多模块无法利用 C++ 11 的良好特性,所以自OpenCV1.x以来许多C风格的API就被干掉啦。历史好像就是这样,前浪总归是要···所以,学习OpenCV,最佳就是从最新的版本开始会比较好。

2.在 core 模块中的持久化(在 XML,YAML 或 JSON 中存储和加载结构化数据)已完全用 C ++ 重新实现,也就是说C风格API拜拜了。目前,base64 支持尚未完成(仅支持加载 base64 编码的 XML 和 YAML,还未支持编码),用过OpenCV中ML模块吗?以后,加载与存储会快许多!

3.编译新版 OpenCV 现在需要支持 C++ 11 的编译器。

4.C++11的标准库扩展,以后没有cv::String与cv::Ptr了。现在,存储在 FileNode 中的序列的随机访问是 O(N) 操作; 使用 cv :: FileNodeIterator 能够更快地进行顺序访问。

最为重要的就是 OpenCV  更新的 DNN (深度神经网络)模块啦!

1. 增加支持 Mask-RCNN 模型的预测。

使用指南:https://github.com/opencv/opencv/wiki/TensorFlow-Object-Detection-APIPython例子:https://github.com/opencv/opencv/blob/master/samples/dnn/mask_rcnn.py

2.集成  ONNX  解析器。 支持多个流行的分类网络。 部分支持 YOLO 对象检测网络(YOLO 的 ONNX 版本缺少一些提供矩形列表的最终图层)。

3.通过引入 Intel DLDT 改进 DNN 模块速度。不过,这个对一般的开发者没有太大的影响。

Intel DLDT 近期已经开源,详见:

https://software.intel.com/openvino-toolkit

4.这一条就和开发者相关性比较大了,DNN模块输入tensor数据的API更改。默认情况下,blobFromImage 方法不会交换 R 和 B 通道,也不会对输入图像进行裁剪。 而且,此 API 更改也已添加到 OpenCV 3.4 分支。

5.如果OpenCL不支持,可以通过Vulkan backend。(开发中···)

6.为 OpenCV 支持的最流行的深度学习网络添加了快捷方式。 可以通过指定模型的别名,跳过预处理参数甚至模型的路径。

以前:python object_detection.py --model opencv_face_detector.caffemodel --config opencv_face_detector.prototxt --mean 104 177 123 --width 300 --height 300you can type just现在:python object_detection.py opencv_fd

7. 修复了  AMD  和  NVIDIA GPU  上的  OpenCL  加速。就是一个提醒,不需要配置太多,不过,不用 Intel GPU 是不是不太好。

这儿得提一句,新模块 G-API 模块!

opencv_gapi 是全新添加的模块,它是非常有效的图像处理引擎。开发者可以在程序中定义多个图像处理步骤组成的图,执行的时候进行优化,使得 fast and portable。

gapi使用示例:

#include <opencv2/videoio.hpp>
#include <opencv2/highgui.hpp>
#include <opencv2/gapi.hpp>
#include <opencv2/gapi/core.hpp>
#include <opencv2/gapi/imgproc.hpp>int main(int argc, char *argv[])
{cv::VideoCapture cap;if (argc > 1) cap.open(argv[1]);else cap.open(0);CV_Assert(cap.isOpened());cv::GMat in;cv::GMat vga      = cv::gapi::resize(in, cv::Size(), 0.5, 0.5);cv::GMat gray     = cv::gapi::BGR2Gray(vga);cv::GMat blurred  = cv::gapi::blur(gray, cv::Size(5,5));cv::GMat edges    = cv::gapi::Canny(blurred, 32, 128, 3);cv::GMat b,g,r;std::tie(b,g,r)   = cv::gapi::split3(vga);cv::GMat out      = cv::gapi::merge3(b, g | edges, r);cv::GComputation ac(in, out);cv::Mat input_frame;cv::Mat output_frame;CV_Assert(cap.read(input_frame));do{ac.apply(input_frame, output_frame);cv::imshow("output", output_frame);} while (cap.read(input_frame) && cv::waitKey(30) < 0);return 0;
}

性能全部提升,各种优化,跟开发者关系比较大的是这条,自己编译OpenCV源码时候,添加CPU_BASELINE=AVX2可以获得比原来15~30%的速度提升,请收藏此技能。

同时,objdetect 模块中新增 二维码的检测和解码,这年代的移动App这个技能只能说是标配吧。

参照:https://github.com/opencv/opencv/blob/master/samples/cpp/qrcode.cpp

3D对象扫描与模型创建流行算法Kinect Fusion algorithm已经被实现,被集成到了rgbd模块中。

非常高效且高质量的 DIS 密集光流算法已经从 opencv_contrib 转移到 opencv/video 模块。

示例:https://github.com/opencv/opencv/blob/master/samples/cpp/dis_opticalflow.cpp

一、源码下载

可能有人会说:源码下载还有什么要说的?事实上,有很多朋友在第一步源码下载就错了:扩展模块与主版本不匹配。

访问opencv在github上的主页:https://github.com/opencv

如下图(图1):

注意上面两个箭头指向的地方,重点关注“opencv”与“opencv_contrib”

点击箭头“1”的"opencv"标签,进入下一页,如图(图2):

注意箭头指向的地方,进页面后默认是"master"版本,我们要的是"opencv4.0",

点击小三角后如图(图3):

点击“Tags”标签,选中“4.0” 后,如下图(图4):

现在当前的源码就是“opencv4.0”的了,点击“Clone or download”开始下载(opencv4.0的主版本源码)

接着再回到opencv主页https://github.com/opencv,见上图(图1),点击箭头2指向的标签“opencv_contrib”,
见下图(图5):

同样,按照上面箭头顺序选择“4.0.0"后,点击“Clone or download”下载“opencv4.0.0”的扩展模块

到此,所有源码下载完毕,分别解压两个压缩包。

另外,编译CV400,建议cmake软件版本选择3.12以上,版本低了可能会有问题。我用的是cmake3.12.4版本。

二,使用cmake生成OpenCV源代码工程

在Cmake之前,先关闭Visual Studio(如果正在运行)

1.选择源码路径及生成路径,如图,点击"Configure"

a.这里注意生成路径,确保这个路径所在盘的剩余空间在18G以上,

因为cmake生成的工程后再在VS中编译最后总文件有17个多G,踩过这坑。。。

b.路径不能有中文

2.选择编译器,如图

最后生成的库是32位还是64位,这里开始选择:

32位的程序兼容性好,64位的速度快。考虑兼容性,大多数人选择32位。点击“Finish”开始配置。

第一次Configure一般几分钟,出现"Configure down"后,如图:

如需编译扩展模块,为“OPENCV_EXTRA_MODULES_PATH”添加扩展模块源码的路径“......../modules”

如项目中要用到SURF,勾选“OPENCV_ENABLE_NONFREE”选项

如果选中"BUILD_opencv_world",这样最后的库是一个文件,如"opencv_world400.dll”

第一次Configure如果不成功,一般是网络不好,一些东西没下载下来,特别是在单位网络过代理的情况下。

可以看窗口中飘红文字提示去看日志文件,根据它提示去下载复制(不容易成功!!!首选好网络)。

第二次点击“Configure”,几分钟。又出现"Configure down"后,点击“Generate”生成工程。

一般到这里都没问题,几分钟后出现“Generate down”就成功了。

三,编译Opencv工程,生成头文件与库

去之前cmake时生成目录,找到"Opencv.sln",如图

打开工程后,点击菜单栏“生成”-》“批生成”,如图

如图中4个复选框都勾上,点击“生成”一次全部生成

大概半小时左右,如下图,就成功了

去目录下看看

“include”  "lib"  "bin"这3个目录下的东东就是我们编程需要的文件了

总结一下:

1.两个源码下载后,cmake选好源码路径和生成路径,

两次Configure(第一次configure后,选好扩展模块源码路径),

一次Generate

2.打开工程后,选中“CMake Targets”下“INSTALL”-》“生成”

大部分朋友编译不成功的原因主要有3点:

1.扩展模块与主源码不匹配

2.cmake时不要有中文路径。

这里说一点:作为程序员,开发时本能地不要用中文,哪怕用拼音都行,不然会有很多意想不到的bug。

3.网络不好,cmake时连不上服务器导致一些文件没下载下来

opencv4+contrib 编译相关推荐

  1. vs2017+cuda10.2+opencv4.5.0+contrib编译

    1.主要参考博客:https://blog.csdn.net/fengxinzioo/article/details/109402921和https://blog.csdn.net/caojinpei ...

  2. OpenCV contrib编译及问题解决

    OpenCV是一个开源发行的跨平台计算机视觉和机器学习软件库,可以运行在Linux.Windows.Android和Mac OS操作系统上.OpenCV中包括很多类型的算法包,还有第三方及专利算法.在 ...

  3. Ubuntu20,opencv4,cere14编译vins报错

    解决Ubuntu20,opencv4,ceres14报错 首先关于ceres报错,大部分原因是ceres编译时用的c++14,vins代码用的c++11直接修改 相关的cmakelist.txt文件 ...

  4. 【OpenCV 笔记】编译Opencv contrib模块

    前言:opencv官方提供的build并不包含全部的功能,比如本人最近接触到的SURF特征提取,这些功能都集成在了contrib模块中,需要我们自己到opencv的官方GitHub上下载contrib ...

  5. cmake教程(为什么要用cmake?)(cmake编译opencv)(就是个跨平台的编译工具Linux、windows)(很重要,必须得学)(报错解决方案)opencv编译

    文章目录 cmake编译opencv源码 分割线 CMake:简介及工程应用,及为什么要用CMake,使用CMake自动构建工程 mark一下,回头更 cmake编译opencv源码 cmake官网: ...

  6. 从零开始仿写一个BiliBili客户端之编译ijkplayer

    章节 从零开始仿写一个B站客户端之-编译ijkplayer 从零开始仿写一个B站客户端之-抓包B站接口 从零开始仿写一个B站客户端之-使用ijkplayer打造一个通用的播放器 从零开始仿写一个B站客 ...

  7. Project ‘cv_bridge‘ specifies ‘/usr/include/opencv4‘ as an include dir,which is not found

    Project 'cv_bridge' specifies '/usr/include/opencv4' as an include dir,which is not found 由于找不到OpenC ...

  8. opencv进阶-OpenCV4.4 CUDA加速

    OpenCV支持传统的图像处理的CUDA加速,从OpenCV4.2开始支持深度神经网络的CUDA加速,因此在OpenCV4.4中,CUDA是既可以加速传统的图像处理,特征与对象检测:又可以支持深度神经 ...

  9. Android ijkplayer 编译踩坑与记录(ijk0.8.8--ffmpeg4.0)

    本文记录了 ijkplayer 的编译完整流程,以及编译过程中遇到的坑及解决方案,如果不想自己编译,可以使用我编译好的结果.已放入 github: ijkplayer_Build4Android 编译 ...

最新文章

  1. 我是一名Cisco爱好 者
  2. swingworker_使用SwingWorker的Java Swing中的多线程
  3. 《源码分析转载收藏向—数据库内核月报》
  4. 正确使用计算机网络,如何正确使用计算机网络
  5. python基于django的学生在线考试自动阅卷系统(含错题本功能)
  6. vgp虚拟路面_某车型开发阶段实际道路谱和虚拟路面谱对比分析.pdf
  7. Chrome OS超便捷安装指南
  8. Activemq配置文件详解
  9. SX1308电压调节,踩坑
  10. 如何看待北大硕士买米粉事件?听听广东亨盛维嘉怎么说
  11. 迪士尼超级计算机多少钱,上海迪士尼乐园公布票务调整方案,明年1月9日起实行新票价...
  12. (社会舆情) 小世界网络,规则网络,随机网络
  13. 微信扫码登陆在chrome浏览器失败
  14. L1-058 6翻了 (15分)
  15. Linux学习——文件权限及文件查找
  16. delphi中常见错误提示说明总结
  17. vue axios传递FormData填坑,headers不显示,后台报错等等问题
  18. 【手把手教你学51单片机】中断的优先级
  19. A系列RPG地图编辑器发布,终于可以编辑地图了
  20. 计算机技术的相关知识

热门文章

  1. 《起跑吧,Opa》 -- 中译本 第一章 初识Opa
  2. JS编写 三角形三边求面积
  3. 算法系列之十九:用天文方法计算日月合朔(新月)
  4. BlockChain初识
  5. P5.js 实现交互式动态绘画
  6. java数组初始化0_Java自学-数组 初始化数组
  7. 树莓派上编写串口助手软件
  8. [转]Facebook 如何管理150亿张照片
  9. Racket编程指南——13 类和对象
  10. [转]奇虎360黑匣子之谜:暗藏后门盗取用户隐私