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 使用新的前缀替换
在这种情况下,比较典型的有如下一些函数。
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.3 使用新命名空间的宏
在这种情况下, 比较典型的有如下一些函数。
-
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