错误:“cv::fisheye”尚未声明
Posted
技术标签:
【中文标题】错误:“cv::fisheye”尚未声明【英文标题】:error: ‘cv::fisheye’ has not been declared 【发布时间】:2015-03-29 15:07:31 【问题描述】:我想为 140 度鱼眼镜头编写相机校准。 由于 opencv 的正常校准不适用于这些镜头,我发现 calib3d 包中似乎有一个 cv::fisheye 模块。
但每次我尝试编译我的代码时,g++ 都会指出:
error: ‘cv::fisheye’ has not been declared
问题在于 opencv 2.4.11 的文档包含方法和附加命名空间。
我的 c++ 文件中包含以下内容:
//OPENCV Stuff
#include "opencv2/opencv.hpp"
#include "opencv2/highgui/highgui.hpp"
#include "opencv2/calib3d/calib3d.hpp"
#include "opencv2/features2d/features2d.hpp"
函数的调用是这样的:
double rmsL = cv::fisheye::calibrate(objectPoints, imagePointsLeft, imagesize, cameraMatrices[LEFT], distCoeffs[LEFT], rvecs, tvecs);
我正在使用 pkg-config 的包含路径进行编译
OPENCV = `pkg-config opencv --cflags --libs`
事实上,正常校准的东西和其他任何与 opencv 相关的东西一样工作正常。
有没有人能帮我解决这个问题? 使用鱼眼校准会非常好,因为它具有广角和计算视差图的改进。
干杯 hGen
【问题讨论】:
它工作正常吗? github.com/Itseez/opencv/commit/… 禁用破碎鱼眼 undistortImage 测试 github.com/Itseez/opencv/blob/… 刚接触 opencv - cv::fisheye 命名空间应该“出现”的机制是什么? fisheye.hpp 和 fisheye.cpp 确实有这种校准方法,但它们是内部的。它们应该由calib3d提供吗?我就是这么读的:docs.opencv.org/ref/master/db/d58/group__calib3d__fisheye.html 是的,我认为它是 calib3d 库的一部分。问题是,如果您手动构建库,它才可用。否则,通过 'apt-get'、'brew' 或其他包管理器,fisheye 命名空间根本不可用。 我设法让它运行,但仅使用 OpenCV 3.0,但命名空间内的功能也无法正常工作。使用任何 funcfinn 时都会出现段错误等 【参考方案1】:你使用这些编译选项吗?
-I/pathto/opencv/include -L/pathto/library lopencv_core
【讨论】:
【参考方案2】:error: ‘cv::fisheye’ has not been declared
是编译错误。不是链接器错误。这意味着,您的编译器无法查找 cv::fisheye
的定义。
要么尝试给出明确的路径。
#include "path/to/opencv2/.....h"
或
在-I
开关中提供包含路径。
g++ -I<path to opencv2> *.cpp -l <path to opencv2 lib> -o <target-name>
【讨论】:
即对于 OpenCV 2.4.x,我需要添加#include "modules/calib3d/src/fisheye.hpp"
。
我建议使用绝对路径。以上是关于错误:“cv::fisheye”尚未声明的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 cv2.fisheye.undistortPoints 将扭曲空间中的点转换为未扭曲空间中的点?