近期发现跟多小伙伴在把OpenCV2的代码移植到 OpenCV3/4时遇到了各种大大小小的问题,下面我就把它们整理一下吧!如果需要对点找到你的问题,可以按Ctrl+F,输入一些关键词(如:大写字母的常量名称)直接定位到与你报错有关的位置哦!
博主第一次写博客,请大家多多指教。如需转载,请注明本博客链接,谢谢!
问题1、由于宏名称的变更造成的“未声明的标识符”系列问题
症状:在OpenCV3的环境下运行OpenCV2中写的程序,报“error C2065: ‘CV_WINDOW_AUTOSIZE’: 未声明的标识符”系列错误
有些时候,是直接加入“#include<cv.h>”便可以让OpenCV3识别到一些CV_前缀的宏
情况1:、直接去掉“CV_”前缀:
典型的有:
函数 | OpenCV2中的函数名 | OpenCV3中的函数名 |
---|---|---|
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、CV_EVENT_LBUTTONDOWN、CV_EVENT_FLAG_LBUTTON、CV_EVENT_MOUSEMOVE | EVENT_LBUTTONUP、EVENT_LBUTTONDOWN、EVENT_FLAG_LBUTTON、EVENT_MOUSEMOVE |
HoughCircles函数 | CV_HOUGH_GRADIENT | HOUGH_GRADIENT |
inpaint函数 | CV_INPAINT_TELEA、 CV_INPAINT_NS | INPAINT_TELEA、INPAINT_NS |
matchTemplate函数 | CV_TM_SQDIFF、CV_TM_SQDIFF_NORMED | TM_SQDIFF、TM_SQDIFF_NORMED |
imwrite函数 | CV_IMWRITE_PNG_COMPRESSION | IMWRITE_PNG_COMPRESSION |
设置摄像头尺寸时 | CV_CAP_PROP_PNG_COMPRESSION、CV_CAP_PROP_FRAME_HEIGHT | CAP_PROP_FRAME_WIDTH、CAP_PROP_FRAME_HEIGHT |
情况2: 需要用新的前缀替换
函数 | OpenCV2中的函数名 | OpenCV3中的函数名 |
---|---|---|
line函数等一系列绘图函数 | CV_AA | LINE_AA |
cvtColor函数中颜色空间转换系的宏 | 所有的“CV_”前缀。如:CV_BGR2HSV | 替换为“COLOR_”前缀。如:COLOR_BGR2HSV |
normalize函数 | CV_MINMAX | NORM_MINMAX |
morphologyEx函数 | 所有的前缀。如:CV_MOP_OPEN | 替换为“MORPH_”前缀。如:MORPH_OPEN |
threshold函数 | 所有的前缀。如:CV_THRESH_BINARY | 全部替换为“THRESH_”前缀。如:THRESH_BINARY |
情况3: 需要在新的命名空间中使用宏
函数 | OpenCV2中的函数名 | OpenCV3中的函数名 |
---|---|---|
TermCriteria函数 | CV_TERMCRIT_EPS、CV_TERMCRIT_ITER | Term Criteria::Eps、TermCriteria::MAX_ITER |
CascadeClassifier::detectMultiScale函数 | CV_HAAR_SCALE_IMAGE | CASCADE_SCALE_IMAGE |
问题2、使用vector容器时提示“error C2065: “vector”:未声明的标识符”系列错误
症状:在OpenCV3的环境下运行OpenCV2中写的程序,使用了vector容器,而未包含STD命名空间。
OpenCV3中并没有在头文件中使用标准程序库std的命名空间。所以只需在程序开头加上“using namespace std;
”即可
其他一些细节问题的解决方案
问题所在 | OpenCV2中的表示方法 | OpenCV3中的表示方法 |
---|---|---|
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 |
更多请参考维基官网:http://code.opencv.org/projects/opencv/wiki/ChangeLog