ジャコ Lab

プログラミング関連のメモ帳的ブログです

Tello のカメラ映像を OpenCV に流す

Tello のカメラ映像を OpenCV に流す

クリスマスですね!

今年のサンタさんは高難易度でした。
無事に子どもの元へ届けることができ、今年の勤務は終了となります。

お仕事の方はあと2日間ですね!
なんか、要件が深く練られておらず、最後の最後まで振り回されそうな感じがします。

それは置いといて、Tello のカメラで遊びます!

前回までのあらすじ

なんとか、Tello の映像から1フレーム分の画像を出力することに成功しました。

OpenCV でカメラの映像を流すには?

通常ケースでは cv2.VieoCapture(0) を使ってカメラ情報を取得し、無限ループの中で capture.read() したフレームデータを cv2.imshow() で流し続ける。というやり方になります。

import cv2

# VideoCapture オブジェクトを取得
capture = cv2.VideoCapture(0)

while(True):
    # カメラからの画像取得
    ret, frame = capture.read()
    # カメラの画像の出力
    cv2.imshow('frame',frame)

    # Qキーを押下したときに抜ける
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break
ふむふむ

Tello のカメラ映像を流してみよう

Tello のカメラ映像は streamon のコマンドを投げたあとに、DJITelloPy の get_frame_read() でフレームデータを取得できるインスタンスを取得します。
前回の記事では、cv2.imwrite で出力していたフレームデータを cv2.imshow に渡す形になります。

import cv2
from djitellopy import Tello

tello = Tello()
tello.connect()
tello.query_battery()

tello.streamon()
frame_read = tello.get_frame_read()

while True:
    cv2.imshow('Tello Camera', frame_read.frame)
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

tello.streamoff()

Tello から取得したカメラ映像
Tello から取得したカメラ映像

本 gif 画像はフレームレートを落としていますが、 実際の映像は通常のカメラと同様の見た目で流れていました。

BGR2RGB をしていないので色は逆転しています

まとめ

無限ループの中でframe_read.frameをたくさん取得しているわけですが、昨日とかの1枚目の映像が真っ黒の話については、フレームデータを取得し続けていれば、そのうち真っ黒画像からちゃんとした画像に変わってたかもしれないですね。