LoginSignup
7
3

More than 3 years have passed since last update.

PythonでARマーカーを映像から探す

Last updated at Posted at 2020-05-20

映像からARを見つけたい

ロボットとかをやってるとARマーカーをランドマークとしていろいろしたくなる。
今回はpython3とopencvで簡単にカメラからARマーカーを見つけていく。

環境

python3.5.4
matplotlib

opencv(contributeが入ってるやつ)

opencv-contributeの入れ方

普通のopencvではダメ
ライセンスの関係でarucoが入っていないらしい
大人の世界って怖いね

pip uninstall opencv-python
通常版のopencvをアンインストール

pip install opencv-contrib-python
目的のopencvをインストール

ARマーカーの作成

generate.py
import cv2
import matplotlib.pyplot as plt

aruco = cv2.aruco
dictionary = aruco.getPredefinedDictionary(aruco.DICT_4X4_50)
generator = aruco.drawMarker(dictionary, 0, 100)#第2引数がID 第3引数がピクセルサイズ
plt.imshow(generator)
plt.show()

こんなWindowが表示されるはず
Figure_q1.png
これをグレースケールの画像として保存

WebカメラからARマーカーを探す

opencv様のチュートリアルでwebカメラの扱いが書いてあるのでそれを改造

main.py
import cv2
import numpy as np
import matplotlib.pyplot as plt

cap = cv2.VideoCapture(0)
cap.set(cv2.CAP_PROP_FPS,15)
aruco = cv2.aruco
dictionary = aruco.getPredefinedDictionary(aruco.DICT_4X4_50)
while(True):
    ret, frame = cap.read()

    corners, ids, rejectedImgPoints = aruco.detectMarkers(frame, dictionary)
    #ここで映像からマーカーを検出

    aruco.drawDetectedMarkers(frame, corners, ids, (0,255,0))
  #マーカーを描画

    cv2.imshow('frame',frame)
    print(cap.get(cv2.CAP_PROP_FPS))

    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

cap.release()
cv2.destroyAllWindows()

こんな感じで相当精度よく動いてくれます

最後に

pythonってやりたいことがすぐできていいけど
つまらん
CUDAでゴリゴリしたいんじゃ....

7
3
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
7
3