- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在尝试找到相机相对于棋盘的相对位置(或相反)——我觉得可以在不同的坐标系之间进行转换,例如按照建议here .我决定在这个阶段不仅将棋盘用于校准,而且还用于确定实际位置,因为我可以使用 findChessboardCorners
来获取 imagePoints
(这可以正常工作)。
我已经阅读了很多关于这个主题的文章,并且觉得我理解 solvePnP
输出(尽管我对 openCV
和一般的计算机视觉是完全陌生的) .不幸的是,我从 solvePnP
获得的结果与实际测量测试设置的结果不同:z 方向的平移大约偏离了。 25%。 x
和 y
方向完全错误 - 几个数量级和不同的方向比我读到的相机坐标系(x 指向图像,y 指向右边,z 远离相机)。如果我将 tvec
和 rvec
转换为世界坐标中的相机姿势,差异仍然存在。
我的问题是:
solvePnP
是否以与我指定的 objectPoints
相同的单位输出翻译?objectPoints
的第一个(棋盘角之一)。这样可以吗?tvec
是从相机坐标到那个点的准确翻译吗?这是我的代码(我附上它形式因为它不会抛出任何异常等)。我在校准期间使用灰度图像来获取相机内在矩阵和畸变系数,因此决定也以灰度图像执行定位。 chessCoordinates
是相对于原点(角点之一)的棋盘点位置列表(以毫米为单位)。 camMatrix
和 distCoefficients
来自校准(使用相同的棋盘和 objectPoints
执行)。
camCapture=cv2.VideoCapture(0) # Take a picture of the target to get the imagePoints
tempImg=camCapture.read()
imgPts=[]
tgtPts=[]
tempImg=cv2.cvtColor(tempImg[1], cv2.COLOR_BGR2GRAY)
found_all, corners = cv2.findChessboardCorners(tempImg, chessboardDim )
imgPts.append(corners.reshape(-1, 2))
tgtPts.append(np.array(chessCoordinates, dtype=np.float32))
retval,myRvec,myTvec=cv2.solvePnP(objectPoints=np.array(tgtPts), imagePoints=np.array(imgPts), cameraMatrix=camMatrix, distCoeffs=distCoefficients)
最佳答案
相机坐标与图像坐标相同。所以你有 x 轴指向相机的右侧,y 轴指向下方,z 指向相机所面对的方向。这是一个顺时针轴系统,同样适用于棋盘,所以如果你指定原点,比方说,棋盘的右上角,x ax 沿着长边向右移动,y 沿着短边移动棋盘,z ax 将指向下方,指向地面。
Solve PnP 以与您指定棋盘字段长度的单位相同的单位输出翻译,但它也可能使用相机校准中指定的单位,因为它使用相机矩阵。
Tvec 指向您放置校准对象的世界坐标的原点。因此,如果您将第一个对象点放在 (0,0) 中,这就是 tvec 将指向的位置。
关于python - OpenCV:解决PnP tvec单位和轴方向,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17423302/
我正在尝试构建一个测试项目来比较 openCv solvePnP 实现与 openGv 实现。 这里详细介绍了opencv: https://docs.opencv.org/2.4/modules/c
我看到 OpenCV 的 solvePnP() 函数假定您的相机参数来自针孔模型。但是我使用 cv.fisheye 模块校准了我的相机,所以我想知道如何使用 solvePnP 以及从该鱼眼模块获得的参
我正在尝试将 pnpm 与 create-react-app v2 一起使用,如下所示 npx create-react-app my-app --use-pnp 但它给了我以下警告 NPM does
有一个名为 Plug'n'Play 的 Shiny Yarn 新功能。 我想知道它究竟是做什么的? 我知道它正在创建一个 .pnp文件夹和 .pnp.js文件,但它是否会更改机器上的其他任何内容,例如
我正在使用 Yarn 2.0.0-rc.27 + 工作区 + TypeScript,我想关闭 PnP 并再次使用 node_modules。我在 package.json 中尝试了以下设置: "ins
我正在开发内核 PnP 驱动程序来映射我的 FPGA。当我使用非分散收集 DMA 时,我需要四个 32Mb 的连续内存缓冲区。现在我在使用 WdfCommonBufferCreate 分配它们时遇到问
我正在尝试使用我的网络摄像头从四个具有已知全局位置的基准的图像中获取全局姿态估计。 我检查了很多 stackexchange 问题和一些论文,但似乎无法找到正确的解决方案。我得到的位置数字是可重复的,
我正在编写一些单元测试来检查 my-module 是否正确加载用户空间模块 external-module: const myMod = require('my-module') myMod( { l
我已将 PnP 合作伙伴包示例部署到 Azure 存储,并创建了两个 Web 作业。一个是预定的,另一个是连续的。 我通过 UI“创建网站集页面”创建了几个网站集,当我检查配置网站集中的 PnPPro
所以我可以通过确保创建一个列表: sp.web.lists.ensure(list) .then((ler: ListEnsureResult) => { if (ler.cr
我的目标是使用PNP小命令设置页面的SharePoint在线现代bannerimageurl属性。 首先,我获得页面列表及其当前标题和bannerimageurl值 # Get alist of al
我有一个真实的/物理的摇杆,上面装有一个红外摄像头和一些形成我正在使用的模式的红外 LED,以便使虚拟摇杆以与物理摇杆相同的方式移动。 为此,我在 Python 中使用 OpenCV,并将由 solv
我们希望针对 SharePoint Online 对我们的 .net core 控制台应用程序进行身份验证 >> 但似乎有两种方法可以使用 PnP.Framework.AuthenticationMa
我的 PNP PowerShell Azure 函数存在问题。 Azure 函数将由 html 或逻辑应用触发,并将连接到 SharePoint 网站。 连接打开后,azure功能会对此站点设置不同的
我正在尝试使用以下参数调用 solvePnP。 apriltag_object_points = np.array([(-1, -1, 0), (-1, 1, 0), (1, 1, 0), (1, -
我正在开发一种工具,用于显示我们在工作中使用的系统上各种硬件组件的状态。目前,我们有 16 个触摸屏显示器(全部由 3M 提供)插入 Windows 10 盒子。我需要验证任何给定的显示器是否具有 W
我想让 intellisense 为远程库 (Chart.js) 工作而不将其作为依赖项包含(它通过 CDN 加载)。 所以我正在使用 @types/chart.js允许智能。 yarn add -D
我正在使用 PnP 配置引擎将一个网站集远程配置到 SharePoint Online 中的另一个网站集,如本视频所示:https://channel9.msdn.com/blogs/OfficeDe
如何制作名为 "\$*'PNP'*$\" 的文件使用触摸命令? 我做了什么: % touch '"\$*'PNP'*$\"' % ls "\$*PNP*$\" 我需要'在P旁边 最佳答案 一种方法是将
我希望使用 SharePoint-PnP 为网站集获取 SharePoint 组角色和权限。 我能够使用 $Web.SiteGroups 检索 SharePoint 组但未能找到获取角色和权限的属性。
我是一名优秀的程序员,十分优秀!