生成aruco代码以及图片识别和动态识别

  • Post author:
  • Post category:其他


批量生成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 版权协议,转载请附上原文出处链接和本声明。