[PYTHON] Nachweis von ArUco-Markern

Versuchen Sie es unter Erkennung von ArUco-Markern.

Umgebung: Mac OS X El Capitan OpenCV 3.2

Vorbereitung

ArUco-Funktionen sind im OpenCV-Beitrag enthalten. Wenn Sie OpenCV mit Homebrew installiert haben, installieren Sie es mit der Option --with-Contrib.

% brew install opencv3 --with-contrib

In OpenCV vor einiger Zeit schien die Python-Unterstützung von ArUco nicht perfekt zu sein. Aber jetzt fühlt es sich an, als könnte es knusprig verwendet werden.

import cv2
aruco = cv2.aruco
dir(aruco)

Es wurde so ausgegeben.

['Board_create',
'CharucoBoard_create',
'DICT_4X4_100',
'DICT_4X4_1000',
'DICT_4X4_250',
'DICT_4X4_50',
'DICT_5X5_100',
'DICT_5X5_1000',
'DICT_5X5_250',
'DICT_5X5_50',
'DICT_6X6_100',
'DICT_6X6_1000',
'DICT_6X6_250',
'DICT_6X6_50',
'DICT_7X7_100',
'DICT_7X7_1000',
'DICT_7X7_250',
'DICT_7X7_50',
'DICT_ARUCO_ORIGINAL',
'DetectorParameters_create',
'Dictionary_create',
'Dictionary_create_from',
'Dictionary_get',
'GridBoard_create',
'__doc__',
'__name__',
'__package__',
'calibrateCameraAruco',
'calibrateCameraArucoExtended',
'calibrateCameraCharuco',
'calibrateCameraCharucoExtended',
'custom_dictionary',
'custom_dictionary_from',
'detectCharucoDiamond',
'detectMarkers',
'drawAxis',
'drawDetectedCornersCharuco',
'drawDetectedDiamonds',
'drawDetectedMarkers',
'drawMarker',
'drawPlanarBoard',
'estimatePoseBoard',
'estimatePoseCharucoBoard',
'estimatePoseSingleMarkers',
'getPredefinedDictionary',
'interpolateCornersCharuco',
'refineDetectedMarkers’]

Erstelle ein Wörterbuch

Erstellen Sie ein Wörterbuchobjekt mit einem vordefinierten Wörterbuch. In diesem Fall beträgt die Markergröße 4x4 und die Anzahl der Marker 50.

dictionary = aruco.getPredefinedDictionary(aruco.DICT_4X4_50)

Dann zeichnen Sie den Marker. Der zweite Parameter ist der Wert, den der Marker hält, und der dritte Parameter ist die Größe des Markerbildes.

marker = aruco.drawMarker(dictionary, 4, 100)

Ich habe so etwas gemacht! download (1).png

Marker erkennen

Bereiten Sie ein Bild mit dem Marker vor und nennen Sie es wie folgt. Ich habe den Bildschirm des Jupyter aufgenommen, den ich versucht habe, das Bild auf 1/20 zu reduzieren, und es erkannt.

img = cv2.imread('Bildschirmfoto.png')
img = cv2.resize(img, None, fx=0.05, fy=0.05)
corners, ids, rejectedImgPoints = aruco.detectMarkers(img, dictionary)

Selbst wenn die Größe des Markers ein Dutzend Pixel beträgt, kann er korrekt erkannt werden. Es ist exzellent!

for number, corner in zip(ids, corners):  
    print number, corner

[4] [[[ 11.  34.]
  [ 26.  34.]
  [ 26.  48.]
  [ 11.  48.]]]
[4] [[[ 11.   6.]
  [ 26.   6.]
  [ 26.  20.]
  [ 11.  20.]]]

Es scheint, dass es verschiedene andere Funktionen gibt, also werde ich damit spielen.

Recommended Posts

Nachweis von ArUco-Markern
Grundlegender Ablauf der Erkennung von Anomalien
Berechnung der mittleren IoU bei der Objekterkennung
Ausführungsbeispiel für die Blob-Erkennung mit OpenCV
Automatische Erkennung des Build-Verzeichnisses in waf
Ich habe versucht, ein Auto in 3D zu erkennen