• 回复
  • 收藏
  • 点赞
  • 分享
  • 发新帖

C++开发中OpenCV2 升级到 OpenCV3/CV4 的改动

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

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

问题:在 OpenCV3/ OpenCV4 的环境下运行 OpenCV2 中写的程序,报 error C2065: <CV_WINDOW AUT0SIZE,:未声明的标识符 系列错误。

分析: OpenCV3/OpenCV4 取消了 OpenCV1 中残留的 CV_ 式的宏前缀命名规范,对这些 CV_ 前缀的宏使用了新的命名规范。这里有几种情况要分类讨论。

1.1 直接去掉“CV_” 前缀

在这种情况下,比较典型的有如下一些函数。

namedWindow 函数中,例如将 CV_WINDOW_AUTOSIZE 改为 WINDOW_AUTOSIZE

threshold 函数中,例如将 CV_THRESH_BINARY 改为 THRESH_BINARY

line 函数等一系列绘图函数中, CV_FILLED 改为 FILLED

remap 函数中, CV_INTER_LINEAR 改为 INTER_LINEAR

在鼠标操作函数 SetMouseCallback 中,将

CV_EVENT_LBUTTONUP 改为 EVENT_LBUTTONUP CV_EVENT_LBUTTONDOWN 改为 EVENT_LBUTTONDOWN CV_EVENT_FLAG_LBUTTON 改为 EVENT_FLAG_ LBUTTON CV_EVENT_MOUSEMOVE 改为 EVENT_MOUSEMOVE

HoughCircles 函数中, 将 CV_HOUGH_GRADIENT 改成 HOUGH_GRADIENT 

inpaint 函数中,将 CV_INPAINT_TELEA 改为 INPAINT_TELEA , 将 CV_INPAINT_NS 改为 INPAINT_NS

matchTemplate 函数中,将 CV_TM_SQDIFF 改为 TM_SQDIFF  CV_TM_SQDIFF_NORMED 改为 TM_SQDIFF_NORMED

 imwrite 函数相关使用中,将 CV_IMWRITE_PNG_COMPRESSION 改成 IMWRITE_PNG_COMPRESSION

设置摄像头尺寸的时候,将 CV_CAP_PROP_FRAME_WIDTH 改为CAP_PROP_FRAME_WIDTH  CV_CAP_PR0P_FRAME_HEIGHT 改为 CAP_PR0P_FRAME_HEIGHT

1.2 CV_GRAY2BGR 颜色类未声明

将CV_GRAY2BGR参数改为COLOR_GRAY2BGR参数即可

1.3 使用新的前缀替换

在这种情况下,比较典型的有如下一些函数。

line 函数等一系列绘图函数中, CV_AA 改为 LINE_AAcvtColor 函数中颜色空间转换系的宏,全替换为 COLOR_ 前缀,如 CV BGR2HSV 改为 COLOR_BGR2HSVnormalize 函数中,将 CV_MINMAX 改为 NORM MINMAXmorphologyEx 函数中的宏,全部替换为 MORPH_ 前缀,如 CV_MOP_OPEN 改为 MORPH_OPENthreshold 函数中的宏,全部替换为 THRESH_ 前缀,如将 CV_THRESH_BINARY  THRESH_BINARY

1.4 使用新命名空间的宏

在这种情况下, 比较典型的有如下一些函数。

TermCriteria 函数中, CV_TERMCRIT_EPS 改为 TermCriteria::EPS CV TERMCRIT ITER 改为 TermCriteria::MAX_ITER

CascadeClassifier::detectMultiScale 函数中, CV_HAAR_SCALE_IMAGE 改为 CASCADE_SCALE_IMAGE 

2. 其它细节

features2d.hpp 头文件路径的更改。将 #include<opencv2/nonfree/features2d.hpp> 改为 #include <opencv2/features2d.hpp>

core.hpp 头文件路径更改。将 #include <opencv2/core/core.hpp> 改为 #include <opencv2/core.hpp>

 format 进行格式化输出时, 将 format(r,"python") 改成 format(r, Formatter::FMT_PYTHON)

定义尺寸时,将 cvSize(-1,-1) 改为 Size(-1,-1)

在表示颜色时,将 CV_RGB 改为 Scalar

全部回复(0)
正序查看
倒序查看
现在还没有回复呢,说说你的想法