12
17

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

ArUco マーカーの検出

Last updated at Posted at 2017-01-26

Detection of ArUco Markers を参考にやってみる。

環境: Max OS X El Capitan
OpenCV 3.2

準備

ArUcoの機能は、OpenCV の contribに入っています。なので、homebrewでOpenCVをインストールしているなら、--with-contrib オプションを付けてインストールしましょう。

% brew install opencv3 --with-contrib

少し前のOpenCV では、ArUcoのPython対応は完全では無いようでした。ですが現在はバリッと使える感じがします。

import cv2
aruco = cv2.aruco
dir(aruco)

このように出力されました。

['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’]

辞書を作る

予め定義されている辞書を使って dictionary オブジェクトを作ります。この場合はマーカーのサイズが4x4で、マーカーの数は50です。

dictionary = aruco.getPredefinedDictionary(aruco.DICT_4X4_50)

次にマーカーを描画します。2番目のパラメータがマーカーの保持する値で、3番目のパラメータはマーカー画像の大きさです。

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

こんなものが出来ました!
download (1).png

マーカーを検出する

マーカーが写っている画像を用意して、以下のように呼び出します。
お試しているjupyterの画面をキャプチャし、画像を20分の1に縮小して検出させてみました。

img = cv2.imread('スクリーンショット.png')
img = cv2.resize(img, None, fx=0.05, fy=0.05)
corners, ids, rejectedImgPoints = aruco.detectMarkers(img, dictionary)

マーカーのサイズが十数ピクセルでも正しく検出できています。優秀ですね!

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.]]]

他にも色々機能があるようなので、遊んでみようと思います。

12
17
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
12
17

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?