Generación de código QR/etiqueta Aruco opencv-python

Recientemente, cuando estaba trabajando en Aruco, descubrí que la vida o la muerte fallaba al generar etiquetas, luego descubrí que era un problema de versión.

Porque cuando ejecuto el comando pip install opencv-contrib-python directamente, descubrí que la versión instalada directamente es opencv-contrib-python==4.7.0.72

Los códigos para generar etiquetas en las versiones 4.6 y 4.7 se proporcionan a continuación.

1, versión opencv-contrib-python==4.6 del código

2. código de versión opencv-contrib-python==4.7

3. Comparación de resumen de algoritmos

Cuando la versión es diferente, la función correspondiente debe ser reemplazada

Funciones de la versión 4.6

Funciones en la versión 4.7

1

cv2.aruco.GridBoard_create

cv2.aruco.GridBoard

2

cv2.aruco.Diccionario_get

cv2.aruco.getDiccionarioPredefinido

3

cv2.aruco_GridBoard.draw

cv2.aruco.Board.generateImage

1, versión opencv-contrib-python==4.6 del código

import cv2
import numpy as np

markersX = 1           #X轴上标记的数量
markersY = 1           #EY轴上标记的数量   本例生成2行6列的格子
markerLength = 100#标记的长度,单位是像素
markerSeparation = 20#每个标记之间的间隔,单位像素
margins = markerSeparation #标记与边界之间的间隔
borderBits = 10 #标记的边界所占的bit位数
showImage = True


width = markersX * (markerLength + markerSeparation) - markerSeparation + 2 * margins
height =markersY * (markerLength + markerSeparation) - markerSeparation + 2 * margins


dictionary = cv2.aruco.Dictionary_get( cv2.aruco.DICT_6X6_250)
board = cv2.aruco.GridBoard_create(markersX, markersY, float(markerLength),float(markerSeparation), dictionary)
print(cv2.aruco_GridBoard.getGridSize(board))
#根据aruco的宽度自动生成合适的图片尺寸
img= cv2.aruco_GridBoard.draw(board,(width,height),1)
cv2.imwrite('frame.png', img)

El resultado de ejecutar el código anterior es el siguiente 

2, versión opencv-contrib-python==4.7 del código

El siguiente código se modifica del código anterior

import cv2
import numpy as np


markersX = 1           #X轴上标记的数量
markersY = 1            #EY轴上标记的数量   本例生成1x1的棋盘
markerLength = 100#标记的长度,单位是像素
markerSeparation = 20#每个标记之间的间隔,单位像素
margins = markerSeparation #标记与边界之间的间隔
borderBits = 10 #标记的边界所占的bit位数
showImage = True


width = markersX * (markerLength + markerSeparation) - markerSeparation + 2 * margins
height =markersY * (markerLength + markerSeparation) - markerSeparation + 2 * margins


dictionary = cv2.aruco.getPredefinedDictionary(cv2.aruco.DICT_7X7_250)

#生成CharucoBoard
#board = cv2.aruco.CharucoBoard((3, 3), 0.015, 0.011, dictionary)
#生成aruco的格子,或者生成1个aruco,(1, 1)表示生成了1行1列
board = cv2.aruco.GridBoard((1, 1), 0.015, 0.011, dictionary)
#board = cv2.aruco.GridBoard((markersX, markersY), float(markerLength),float(markerSeparation), dictionary)
print(cv2.aruco.Board.getIds(board))


#	outSize[, img[, marginSize[, borderBits]
#img = cv2.aruco.Board.generateImage( board,(300,400), 0, 1)
img = cv2.aruco.Board.generateImage( board,(width,height), 0, 1)
cv2.imwrite('frame.png', img)

El resultado de ejecutar el código anterior se muestra en la siguiente figura

El código anterior también genera código CharucoBoard, que se puede generar a pedido eliminando los comentarios.

Preste atención para distinguir entre tres formatos, vea la figura a continuación

 3. Comparación de resumen de algoritmos

Cuando la versión es diferente, la función correspondiente debe ser reemplazada

Funciones de la versión 4.6

Funciones en la versión 4.7

1

cv2.aruco.GridBoard_create

cv2.aruco.GridBoard

2

cv2.aruco.Diccionario_get

cv2.aruco.getDiccionarioPredefinido

3

cv2.aruco_GridBoard.draw

cv2.aruco.Board.generateImage

 Además, se debe prestar especial atención a la

En la versión 4.6, se debe instalar opencv-contrib-python

En la versión 4.7, el módulo aruco se colocó en la biblioteca principal, por lo que solo necesita instalar opencv-python, y no necesita citar aaruco por separado al hacer referencia, solo consulte cv2

Declaración de derechos de autor: no reproducir sin permiso

Supongo que te gusta

Origin blog.csdn.net/sunnyrainflower/article/details/131110680
Recomendado
Clasificación