クリスマスですね!
今年のサンタさんは高難易度でした。
無事に子どもの元へ届けることができ、今年の勤務は終了となります。
お仕事の方はあと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()
本 gif 画像はフレームレートを落としていますが、 実際の映像は通常のカメラと同様の見た目で流れていました。
BGR2RGB をしていないので色は逆転しています
まとめ
無限ループの中で
frame_read.frame
をたくさん取得しているわけですが、昨日とかの1枚目の映像が真っ黒の話については、フレームデータを取得し続けていれば、そのうち真っ黒画像からちゃんとした画像に変わってたかもしれないですね。