错误:“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 将扭曲空间中的点转换为未扭曲空间中的点?

类模板继承的“尚未声明”错误[重复]

c ++由于命名空间导致无法解释的类“尚未声明”错误

错误:‘uuid_t’在此作用域中尚未声明

您的应用无法发布,因为以下 APK 使用了尚未声明的敏感权限:56

Qt + iperf3 = lconv 尚未声明