主要的问题还是随着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)
报错
让那些狗屎的错误和解答博客都见鬼去吧
报错一
网上最常见的、关于aruco的代码是下面这段,来自链接
python下使用aruco标记进进行三维姿势估计_python aruco-CSDN博客
我用知乎,大模型得到的代码都是下面这段,但是我试了opencv3.4、opencv4.3、opencv4.5、opencv4.7多个版本的opencv,都没能将这段代码调用起来,我看评论区还有说opencv3.1的,但是我写这篇博客的时候opencv3.1的python安装包已经被禁没法使用了,因此这段代码基本上可以说是一个非常流行的废代码,一点作用没有,只会耽误时间
import cv2import numpy as npdictionary = 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 #