opencv - 图像角落的相机校准
问题描述
我正在使用 OpenCV 并正在校准相机,这是第一次测试 charuco 型校准器。
我对这个校准器有很多期望,认为使用它我可以比使用标准棋盘更接近图像的角落,因为不需要完全看到 charuco。这在理论上应该有助于投影系统的建模,因为角落的光学变形更大。
我得到的结果让我有点困惑。该interpolateCharucoCorners
函数从不返回棋盘的最后一行/列,因此无法使用图像的这些区域进行校准。
只是为了给你一个想法,我附上了下图,其中我突出显示了由提取的点描述的interpolateCharucoCorners
区域(该区域是整个点集的凸包)。
查鲁科板:
如您所见,标记右侧的最后一列尚未提取。你能帮我解释一下为什么吗?如何在校准中包含这些像素?ChArUco 角提取如下。
这是我的代码,但它与示例中的相同:
image_grayscale = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
corners, ids, rejected_points = cv2.aruco.detectMarkers(image_grayscale, board.dictionary)
_, charuco_corners, charuco_ids = cv2.aruco.interpolateCornersCharuco(corners, ids, image_grayscale, board)
解决方案
我终于找到了解决方案。可以通过设置参数来提取边缘附近的minMarkers = 0
标记interpolateCornersChaurco
。来自文档:
MinMarkers:必须检测到返回 charuco 角的相邻标记的数量。
https://docs.opencv.org/3.4/d9/d6a/group__aruco.html#gadcc5dc30c9ad33dcf839e84e8638dcd1
这是生成的图像:
推荐阅读
- excel - 将数据网格视图导出到 Excel
- jmeter - jmeter 传递的 TLS 版本
- javascript - 无法使用 jQuery 从 POST 请求中获取结果
- java - 如果没有可用的互联网连接,如何关闭应用程序
- android - android如何使用firebase获得有机用户(来自Google Play商店的直接用户)?
- autosar - AUTOSAR:所有 RunnableEntities 及其调用者的调用映射
- veracode - 如何在 Veracode 中实现 DAST(动态分析),它有什么特点?
- angular - Angular Material Date Validator 获取无效值
- sql-server - 从服务器运行 .dtsx 时 CANNOTACQUIRECONNECTIONFROMCONNECTIONMANAGER
- android - 使用大型 sqlite 部署数据库的指南