如何使用 OpenCV(在 C++ 中)将齐次点转换为非齐次点
Posted
技术标签:
【中文标题】如何使用 OpenCV(在 C++ 中)将齐次点转换为非齐次点【英文标题】:How to convert homogeneous points to inhomogeneous points using OpenCV (in C++) 【发布时间】:2015-06-18 08:08:06 【问题描述】:我想转换积分。目前我的代码如下所示:
std::vector<cv::Point3d> homCamPoints(4);
// some assignments to homCamPoints
std::vector<cv::Point2d> inhomCamPoints(4);
convertPointsFromHomogeneous(homCamPoints, inhomCamPoints);
但我总是收到有关内存位置的异常错误。所以,我假设我的输入类型是错误的,尽管OpenCV documentation 说:
src - N 维点的输入向量。 dst – N-1 维点的输出向量。听起来我的输入类型没问题。但是在网上我只找到了使用cv::Mat
类型的例子,但由于时间问题我想避免在那个阶段进行重组。
我在调试模式下运行我的代码。调用函数时,参数似乎真的很好。然后在输入函数后立即发生错误,但我无法准确弄清楚,因为我无法进入函数代码本身。有谁知道为什么这不起作用?谢谢。
【问题讨论】:
功能代码可以在OpenCVsgithub上找到。您可以合法下载、编译、链接和使用。 【参考方案1】:我试过了:
std::vector<cv::Point3d> homCamPoints(4, cv::Point3d(0,0,0));
homCamPoints[0] = cv::Point3d(0,0,0);
homCamPoints[1] = cv::Point3d(1,1,1);
homCamPoints[2] = cv::Point3d(-1,-1,-1);
homCamPoints[3] = cv::Point3d(2,2,2);
std::vector<cv::Point2d> inhomCamPoints(4);
cv::convertPointsFromHomogeneous(homCamPoints, inhomCamPoints);
它毫无例外地工作。也许您的问题在您的代码中的其他地方。 inhomCamPoints 是: [0, 0], [1, 1], [1, 1], [1, 1]
【讨论】:
很奇怪。如果我将您的行完全复制到我的代码中,那么它可以正常工作,直到这个函数调用......然后我再次收到错误。我实在想不通问题出在哪里。 你试过只执行这段代码吗?只有 int main()/*以上代码*/,当然包括库。如果这样可行,那么您的问题就出在其他地方。 我又试了一次,把所有的东西都注释掉了。我唯一包含的是#include "opencv2/opencv.hpp"
,然后是int main()/*above code*/
,仅此而已。我仍然得到同样的错误......
我不知道为什么,但是当我只输入float
而不是double
时,它就可以工作了.....以上是关于如何使用 OpenCV(在 C++ 中)将齐次点转换为非齐次点的主要内容,如果未能解决你的问题,请参考以下文章
如何在 OSX 中使用 C++ opencv highgui 将活动窗口设置为 opencv 图像
OpenCV - 如何使用 Eclipse C++ IDE 将 /home 中编译的 opencv 库优先于 /usr/lib/ 中编译的库
如何在 C++ 中使用 OpenCV 4.2 计算二进制图像的周长
如何将来自不同图像的多个描述符存储在 C++ 和 OpenCV 中的向量向量中?