opencv3与opencv2区别(代码上的一些不同写法及避坑在最后)
2009年10月01日,OpenCV 2.0发布,这标志着革命性的OpenCV2时代的 来临。OpenCV 2带来了全新的C++接口,将OpenCV的能力无限放大。在2.0的 时代,OpenCV增加了新的平台支持,包括iOS和Andriod,通过CUDA和OpenCL 实现了 GPU加速,为Python和Java用户提供了接口,基于Github和Buildbot 构建了充满艺术感的持续集成系统,所以才有了被全世界的很多公司和学校所采用的稳定易用的OpenCV 2.4.x。
2014年8月21日,OpenCV 3.0 Alpha发布,宣告着OpenCV3时代的登场。 官方更新日志中提到,OpenCV在3.0中改变了项目架构的方式,所以3.0时代不 会有像2.0时代一样激进的尝试,只会有足够稳定的改进。且不说更多眼花缭乱 的新特性,项目架构的改变是OpenCV3或为重大的革新之处。

将OpenCV2代码升级到OpenCV3报错时的些策略
由于OpenCV3的主体部分只是在OpenCV2的基础上进行小幅度的更改,所以我们会发现不少OpenCV2下开发的程序仍然可以在OpenCV3中正常编译运行。
然而,有一些版本升级导致的改变则会让我们在OpenCV2下开发的程序在
OpenCV3中报错。本节,让我们将这些知识点聚在一起做一个列举,供大家在把基于OpenCV2的代码升级到OpenCV3时查阅。

1.【问题一】由于宏名称的变更照成的“未声明的标识符”系列问题;

有时候,遇到此类问题加入一句"#include<cv.h>“便可以让OpenCV3
也能认识一些“CV_前缀的宏,将问题解决掉 因为有不少OpenCV1
” 的宏依然在OpenCV3的cv.h头文件中有定义。

症状:在OpenCV3的环境下运行OpenCV2中写的程序,报“error C2065:‘CV_WINDOW_AUTOSIZE’:未声明的标识符”系列错误。
分析:OpenCV3取消了 OpenCVl中残留的“CV_”式的宏前缀命名规范,
对这些CV一前缀的宏使用了新的命名规范。这里有几种情况要分类讨论。

(1)情况1 :直接去掉“CV_”前缀
在这种情况下,比较典型的有如下一些函数。
I )namcdWindow 函数中,例如将 CV_W1NDOW_AUTOS1ZE 改为 WINDOW. AUTOSIZE.
2) threshold 函数中,例如将 CV_THRESH_BINARY 改为 THRESH_BINARY。
3) line函数等 系列绘图函数中,CV_FILLED改为FILLED.
4) remap 函数中,CV_INTER_LINEAR 改为 INTER_L1NEAR.
5)在收标操作函数 SctMouscCallback 中,将 CV_EVENT_LBUTTONUP 改为 EVENT_LBUTTONUP 、 CV_EVENT_LBUTTONDOWN 改为 EVENT_ LBUTTONDOWN.CV_EVENT_FLAG_LBUTTON 改为 EVENT_FLAG_ LBUTTON、 CV_EVENT_MOUSEMOVE 改为 EVENT_MOUSEMOVE.
7) HoughCircIcs 函数中,将 CV_HOUGH_GRADIENT 改成 HOUGH_ GRADIENT。
8) inpaint 函数中,将 CV INPAINT_TELEA 改为 1NPAINT_TELEA. CV_ INPAINT_NS 写作 INPAINT_NS.
9) maichTemplate 函数中,将 CV_TM_SQDIFF 改为 TM_SQDIFF、CV_TM_ SQDIFF_NORMED 改为 TM_SQDIFF_NORMED.
10)在 imwrite 函数相关使用中,将 CV 1MWRITE_PNG_COMPRESS1ON 改 成 IMWRITE_PNG_COMPRESSION.
10)设置摄像头尺寸的时候,将CV_CAP_PROP_FRAME_W1DTH改为 CAP_PROP_FRAME_WIDTH , CV_CAP_PROP_FRAME_HE1GHT 改为 CAP_ PROP_FRAME_HEIGHT.

(2)情况2:需要用新的前缀替换
在这种情况下,比较典型的有如下一些函数.

  1. line函数等一系列绘图函数中,CV_AA改为LINE_AA
  2. cvtColor函数中颜色空间转换系的宏,全替换为“COLOR“前缀,如 CV BGR2HSV 改为 COLOR_BGR2HSV
  3. normalize 函数中,将 CV_MINMAX 改为 NORM_MINMAX.
  4. morphology Ex函数中的宏,全部替换为“MORPH_"前缀,如CV_MOP_ OPEN 改为 MORPH_OPEN。
  5. threshold函数中的宏,全部杵换为“THRESH_”前缀,如将CV_THRESH_ BINARY 改 THRESH_BINARY

(3)情况3:需要在新的命名空间中使用宏
在这种情况下,比较典型的有如下一些函数。
1)TermCriteria 函数中,CV_TERMCR1T_EPS 改为 TermCriteria::EPS、 CV_TERMCR1T_ITER 改为 TermCriteria::MAX_ITER
2) CascadcClassifier::detectMultiScale 函数中,CV_HAAR_SCALE_IMAGE 改为 CASCADE_SCALE_IMAGE.

2 .【问题二】使用vector容器之时提示“error C2065: “vector”:未声明的标识符” 系列错误
症状:在OpenCV3的环境卜运行OpenCV2中写的程序,使用/ vector容器, 而未包含STD命名空间,手是便会报"error C2065:“vector”:未声明的标识符"系列错误.
分析:OpenCV3中并没有在头文件中使用标准程序库std的命名空间.所以 遇到这个错误,在我们写的程序开头加上 徇“using namespace sld;”使用C++的 标准命名空间即可解决问题.
上述两个就是OpenCV2代码升级OpcnCV3时坡常会遇到的问题。接下来, 列举些OpenCV3升级时些其他的改动细节,以结束此节.

3 .其他一些细节问题的解决方案
1 )features2d. hpp 头文件路径的更改.将#include <opencv2/non free/ features2d.hpp>
改为#include <opcncv2/fcaturcs2d.hpp>
2 ) core.hpp 头文件路径更改.将#include <opencv2/core/core.hpp>改为#include <opcncv2/corc.hpp>
3 )用format进行格式化输出时,将format(r,“python”)改成format(r,Formatter::FMT_PYTHON)。
4)定义尺寸时,将cvSize(-1,-1)改为Size(-1,-1)。
5)在表示颜色时,将CV_RGB改为Scalar.

部署上避坑点
1


vector<int>cpmpression_params;//opencv2写法
compression_params.push_back(CV_IMERITE_PNG_COMPRESSION);
//opencv3写法compression_params.push_back(100);
//图像压缩参数,该参数取值范围为0-100,数值越高,图像质量越高

Opencv输出时

Mat r=Mat(10,3,CV_8UC3);//建立十行 三列 的Mat容器数组,一个数值为BGR三种参数[(b,g,r),(b,g,r),(b,g,r)] 注Scalar参数特性。
randu(r,Scalar::all(0),Scalar::all(255);//使用randu产生随机值来填充矩阵。
cout<< "opencv风格" <<r<<";"<<endl<<endl;
cout<<"python风格" << format(r,"python") <<";"<<endl<<endl;//Opencv2写法
cout<<"python风格" << format(r,Formatter::FMT_PYTHON) <<";"<<endl<<endl;//Opencv3 



2
当调用opencv 出现以下报错时
3 IntelliSense: 无法打开 源 文件 “opencv2/core.hpp”
4 IntelliSense: 无法打开 源 文件 “opencv2/imgproc.hpp”
5 IntelliSense: 无法打开 源 文件 “opencv2/calib3d.hpp”
6 IntelliSense: 无法打开 源 文件 “opencv2/highgui.hpp”

**请检查自己时opencv3还是2,上面时opencv3的写法,如果自己安装的时opencv2就会报错。**

当使用opencv2时正确头文件路径
#include <opencv2/core/core.hpp>
#include “opencv2/imgproc/imgproc.hpp”
#include “opencv2/calib3d/calib3d.hpp”
#include <opencv2/highgui/highgui.hpp>

参考资料
OpenCV3编程入门 (毛星云著)

opencv3与opencv2特性区别,及代码部署上的bug避坑点相关推荐

  1. 速记:安卓Netty部署SSL/TLS和避坑指南

    速记:安卓Netty部署SSL/TLS和避坑指南 先按照 https://blog.csdn.net/russle/article/details/99086684 方法操作 第一步 生成服务器端私钥 ...

  2. 使用Docker部署SpringBoot项目(避坑+超级详细版本)

    使用Docker部署SpringBoot项目(避坑+超级详细版本) 首先呢,非常感谢我们一起相遇在这个地方,想必此刻的你也是在一个学习求知的过程,我们一样,我们都是在求知的路上匍匐前进!看到这篇文章, ...

  3. java类中的代码块,Java开发避坑指南!

    一.阿里 (会员中台) 1. Java 重写hashcode()是否需要重写equals(),不重写会有什么后果 2. 并发 自旋锁和阻塞锁的区别 公平锁和非公平锁的区别 jdk中哪种数据结构或工具可 ...

  4. Greenplum【环境搭建 02】GP 数据库 web 监控工具 Greenplum Command Center v6.6.0 安装配置及问题处理(一篇学会部署配置启动 GPCC 避坑指南)

    1.工具介绍

  5. 自动化代码部署、代码回滚、命令执行软件之capistrano

    Hi,本周第一天没什么事,所以就先分享一下我研究自动化代码部署与回滚软件的经验.这个软件有什么用途?主要是解决自动进行代码的部署,避免手动部署时出现错误,节省时间,同时在出现问题的时候,能回滚到之前的 ...

  6. python的特性注定了代码无法保密_python 基础

    谈谈你对python和其他语言的区别 python 中,变量是以内容为基准而不是像 c 中以变量名为基准: python 中,一个变量可以以多个名称访问: python 中,数字类型的值是不可变的: ...

  7. php 前端缓存,前端浏览器缓存及代码部署

    前言 最近手上刚刚拆掉石膏,去楼下房友帮忙.楼下房友领导来自阿里,前端用的是阿里的ant-design,设计将设计图上传到蓝湖,聊天工具也采用阿里的钉钉.有时间我也多多去楼下房友交流学习,多交流,就会 ...

  8. ruby网站部署到服务器,入门知识: 把代码部署到服务器, SSH

    入门知识: 把代码部署到服务器, SSH 2015-07-28 16:28 访问量: 2868 分类: 技术 如何登陆远程服务器呢? $ ssh root@your.server.com -p 334 ...

  9. CPL DPL RPL的区别 一致性代码段和非一致性代码段

    概述:在谈论保护模式编程的时候,一直会有这样的困惑:为什么除了CPL和DPL还有RPL?什么时候高特权级不能访问低特权级?什么时候低特权级不能访问高特权级?一致性代码和非一致性代码有什么区别?等等这些 ...

最新文章

  1. 如何在Go中编写多行字符串?
  2. python可以处理什么文件夹_Python处理文件和文件夹的10条命令
  3. go语言值得学习的开源项目推荐
  4. 预处理器sass_Sass — Web的预处理器装饰
  5. 51nod1255【贪心-栈的应用】
  6. assert.h库学习
  7. 群体智能优化算法之人工鱼群优化算法(Artificial Fish Swarm Algorithm,AFSA)
  8. shell脚本:一次读取文件的一行,并输出
  9. 2017年计算机类核心期刊,2017年北大版中文核心期刊要目总览目录.pdf
  10. CSS - 盒子模型(下)
  11. [刀塔自走棋] 一些数据
  12. centos oracle 修改监听服务名_虚拟机(Oracle Virtual Box)下ORACLE的安装
  13. TypeError: decoding str is not supported
  14. 解决layui form组件使用botton按钮提交页面自动刷新问题
  15. 随便谈谈我的实习经历
  16. C++ 九阴真经之单例模式
  17. 十个励志小故事,一场精彩的人生课!
  18. 常用工具类之jwt的学习使用
  19. ABP VNext学习日记18
  20. python3中生成图片验证码和短信验证码的程序

热门文章

  1. 新能源汽车——汽车分类
  2. 云转码:express-ffmpeg 免费开源云转码切片平台
  3. 动画案例及设计模式研究
  4. 面积小的展厅布局和设计的改进思路
  5. 或许我只是个小丑罢了
  6. js正则-筛选中文,英文,数字
  7. MOC3061使用手记
  8. 计算机网口速率修改,计算机已连接到千兆路由器/千兆交换机,协商的速率仅为100M?...
  9. Reflex WMS入门系列二十六:合并托盘
  10. 如何创建一个没有密码的加密文件夹