批量生成30个6×6个aruco

import cv2
import numpy as np
dictionary = cv2.aruco.Dictionary_get(cv2.aruco.DICT_6X6_250)
markerImage = np.zeros((200, 200), dtype=np.uint8)
for i in range(30):
markerImage = cv2.aruco.drawMarker(dictionary, i, 200, markerImage, 1)
firename='./armark/'+str(i)+'.png'
cv2.imwrite(firename, markerImage)
加载图片识别标识
import cv2
import cv2.aruco as aruco
frame = cv2.imread(r'.\images\test.png')
frame = cv2.resize(frame, None, fx=1, fy=1, interpolation=cv2.INTER_CUBIC)
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
# cv2.imshow('gray', gray)
aruco_dict = aruco.Dictionary_get(aruco.DICT_6X6_250)
parameters = aruco.DetectorParameters_create()
corners, ids, rejectedImgPoints = aruco.detectMarkers(gray, aruco_dict, parameters=parameters)
print(ids, corners)
# print(ids[0], corners[0])
aruco.drawDetectedMarkers(frame, corners, ids)
cv2.imshow("frame", frame)
cv2.waitKey(0)
cv2.destroyAllWindows()
动态识别标识(相机畸变有点严重,还不会调,但可以识别,可以用,在网上找的代码,仅分享,以后有空再调)
import numpy as np
import time
import cv2
import cv2.aruco as aruco
cap = cv2.VideoCapture(0)
font = cv2.FONT_HERSHEY_SIMPLEX
#num = 0
while True:
ret, frame = cap.read()
h1, w1 = frame.shape[:2]
newcameramtx, roi = cv2.getOptimalNewCameraMatrix(mtx, dist, (h1, w1), 0, (h1, w1))
dst1 = cv2.undistort(frame, mtx, dist, None, newcameramtx)
x, y, w1, h1 = roi
dst1 = dst1[y:y + h1, x:x + w1]
frame = dst1
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
aruco_dict = aruco.Dictionary_get(aruco.DICT_6X6_250)
parameters = aruco.DetectorParameters_create()
dst1 = cv2.undistort(frame, mtx, dist, None, newcameramtx)
corners, ids, rejectedImgPoints = aruco.detectMarkers(gray,aruco_dict,parameters=parameters)
if ids is not None:
rvec, tvec, _ = aruco.estimatePoseSingleMarkers(corners, 0.05, mtx, dist)
(rvec-tvec).any()
for i in range(rvec.shape[0]):
aruco.drawAxis(frame, mtx, dist, rvec[i, :, :], tvec[i, :, :], 0.03)
aruco.drawDetectedMarkers(frame, corners)
cv2.putText(frame, "Id: " + str(ids), (0,64), font, 1, (0,255,0),2,cv2.LINE_AA)
else:
cv2.putText(frame, "No Ids", (0,64), font, 1, (0,255,0),2,cv2.LINE_AA)
cv2.imshow("frame",frame)
key = cv2.waitKey(1)
if key == 27:
print('esc break...')
cap.release()
cv2.destroyAllWindows()
break
if key == ord(' '):
filename = str(time.time())[:10] + ".jpg"
cv2.imwrite(filename, frame)
版权声明:本文为weixin_49828565原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。