7
3

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?