Ich verwende:
- Windows
- Python 3.10.5
- opencv-contrib-python 4.7.0.72
Code: Select all
import cv2
img = cv2.imread("april_board_drawing.png", cv2.IMREAD_COLOR)
aruco_dict = cv2.aruco.getPredefinedDictionary(cv2.aruco.DICT_APRILTAG_36h11)
arucoParams = cv2.aruco.DetectorParameters()
arucoParams.markerBorderBits = 2
(corners, ids, rejected) = cv2.aruco.detectMarkers(img, aruco_dict, parameters=arucoParams)
cv2.aruco.drawDetectedMarkers(img, corners, ids)
cv2.imshow('img', img)
cv2.waitKey(0)
cv2.destroyAllWindows()
ideal image.png
Ich habe dann mit einer Aufnahme von meiner Kamera fortgefahren. Und hier trat das Problem auf. Es wurden nur sehr wenige Marker erkannt (15/49). Ich habe dafür eines der besten Bilder ausgewählt, die ich gemacht habe. Nicht alle Markierungen sind perfekt, es gibt einige Blendungen, aber viele haben einen recht guten Kontrast und werden immer noch nicht erkannt. Ich habe mit den Erkennungsparametern herumgespielt, aber ohne Erfolg.
real image.png
Vielleicht ist die Verzerrung zu stark, dachte ich. Also entzerrte ich das Bild, entfernte so die Verzerrung und versuchte es erneut. Dies brachte mir einige zusätzliche Erkennungen (20/49), aber viele wurden immer noch nicht erkannt.
real image rectified.png
Ich hatte dann eine Schauen Sie sich die abgelehnten Markierungen an. Sie scheinen richtig abgelehnt zu werden. Kein Problem. Allerdings ist es seltsam, dass mehrere Markierungen fast korrekt sind. Ich bin mir nicht sicher, was da los ist. Ich habe die richtige Rahmengröße angegeben.
rejections.png
Andere Dinge, die ich versucht habe:
- Größe ändern, Zuschneiden und Spiegeln des Eingabebildes
- Graustufen- und Farbeingabe
- alle aruco.DetectorParameters optimiert
Die Geometrie der Kalibrierungstafel scheint kein Problem zu sein, da die Markierungen in der idealen Zeichnung korrekt erkannt werden, oder? Aufgrund der hohen Markierungsdichte und der Möglichkeit, an den Ecken eine Subpixel-Verfeinerung durchzuführen, bevorzuge ich die Verwendung dieser Art von Platine.
Irgendeine Idee, was hier falsch läuft? Wir freuen uns über jede Hilfe!
Hier sind alle Eingabebilder, die ich verwendet habe:
april_board_drawing.png
april_board_real.png
april_board_real_rectified.png