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_AA
cvtColor
函数中颜色空间转换系的宏,全替换为 COLOR_
前缀,如 CV BGR2HSV
改为 COLOR_BGR2HSV
normalize
函数中,将 CV_MINMAX
改为 NORM MINMAX
morphologyEx
函数中的宏,全部替换为 MORPH_
前缀,如 CV_MOP_OPEN
改为 MORPH_OPEN
threshold
函数中的宏,全部替换为 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