ArUco 相关(opencv)

主要的问题还是随着opencv的版本升级,对aruco模块的函数命名变化挺大的,因此需要正确调用opencv对应版本下的aruco相关函数,不然程序无法运行,会报各种异常

在线ArUco工具

https://chev.me/arucogen/

保存下来的是svg格式

环境

python 3.7.16

opencv 4.7.0

其实就只安装了两个包:

opencv_contrib_python-4.7.0.68-cp37-abi3-win_amd64.whl

opencv_python-4.7.0.72-cp37-abi3-win_amd64.whl

创建aruco标定图

markerImage = np.zeros((200, 200), dtype=np.uint8)
dictionary = cv2.aruco.getPredefinedDictionary(cv2.aruco.DICT_6X6_250)
#生成内部为6*6,加外围一层黑边实际为8*8的图
cv2.aruco.generateImageMarker(dictionary, 0, 200, markerImage, 1)
#dictionary:定义的标定图
#0:第几张aruco标定图
#200:标定图尺寸
#markerImage:要绘制的标定图
#1:aruco标定图外围黑边的尺寸
cv2.imwrite("marker22.png", markerImage)

检测aruco标定图

image = cv2.imread(r'ArUco\102_aruco.jpg')
dictionary = cv2.aruco.getPredefinedDictionary(cv2.aruco.DICT_6X6_250)
arucoParams = cv2.aruco.DetectorParameters()
corners, ids, rejected = cv2.aruco.detectMarkers(image, dictionary, parameters=arucoParams)
cv2.aruco.drawDetectedMarkers(image, corners, ids, (0, 0, 255))
cv2.imwrite("image11.jpg", image)

相机姿态估计

image = cv2.imread(r'102_aruco.jpg')
dictionary = cv2.aruco.getPredefinedDictionary(cv2.aruco.DICT_6X6_250)
arucoParams = cv2.aruco.DetectorParameters()
corners, ids, rejected = cv2.aruco.detectMarkers(image, dictionary, parameters=arucoParams)
rvec, tvec, _ = cv2.aruco.estimatePoseSingleMarkers(corners, 0.05, K, D) 
#K相机内参、D畸变系数、坐标轴rvec旋转、 坐标轴tvec平移
for i in range(rvec.shape[0]):
    cv2.drawFrameAxes(image, K, D, rvec[i, :, :], tvec[i, :, :], 0.03)
cv2.imwrite("image11.jpg", image)

报错

让那些狗屎的错误和解答博客都见鬼去吧

报错一

网上最常见的、关于aruco的代码是下面这段,来自链接

python下使用aruco标记进进行三维姿势估计_python aruco-CSDN博客

我用知乎,大模型得到的代码都是下面这段,但是我试了opencv3.4、opencv4.3、opencv4.5、opencv4.7多个版本的opencv,都没能将这段代码调用起来,我看评论区还有说opencv3.1的,但是我写这篇博客的时候opencv3.1的python安装包已经被禁没法使用了,因此这段代码基本上可以说是一个非常流行的废代码,一点作用没有,只会耽误时间

 import cv2
 import numpy as np
 dictionary = cv2.aruco.Dictionary_get(cv2.aruco.DICT_6X6_250)
 markerImage = np.zeros((200, 200), dtype=np.uint8)
 markerImage = cv2.aruco.drawMarker(dictionary, 22, 200, markerImage, 1)
 cv2.imwrite("marker22.png", markerImage)
报错二
 AttributeError: module 'cv2.aruco' has no attribute 'Dictionary_get'

别听那些乱七八糟的博客鬼扯,这个函数已经被重命名了,直接舍

报错三
 AttributeError: module 'cv2.cv2' has no attribute 'aruco'

我在尝试opencv4.3时报的这个错误,别信网上那些卸了重按的,类似下面的博客

ModularNotFoundError: No module named “cv2.aruco“ 解决办法,亲测有效_modulenotfounderror: no module named 'cv2.aruco-CSDN博客

 pip install opencv-python

这个命名只会安装最新版本的opencv,他哪年哪月按的,你哪年哪月按呀,opencv版本怎么可能一样

参考链接

https://docs.opencv.org/4.9.0/d5/dae/tutorial_aruco_detection.html

Detection of ArUco Markers

还得是官方文档,虽然我只找到了C版本的代码

Augmented Reality using ArUco Markers in OpenCV (C++ / Python) | LearnOpenCV #

  • 7
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值