🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

1回答

3113閲覧

pythonでマスク処理をした動画にオプティカルフローを表示する

kiiiinooookooo

総合スコア0

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2020/12/24 07:08

任意の動画に対するマスク処理を行ったあとオプティカルフローを表示したいと思っています。
現在このエラーメッセージが出ています。またマスク処理をした動画をオプティカルフローのフレームに入れようとするとエラーがでます。

エラーメッセージ
Traceback (most recent call last):
File "/usr/lib/python3.7/ast.py", line 35, in parse
return compile(source, filename, mode, PyCF_ONLY_AST)
File "/home/pi/mask-satoshi.py", line 33
if ret == True:
^
IndentationError: unexpected indent

対象のプログラム

pyhton

1import cv2 2import numpy as np 3# 任意の動画を読み込む 4cap = cv2.VideoCapture('/home/pi/swim/side.mp4') 5#動画が読み込めていないとErrorを表示 6if cap.isOpened()== False: 7 print("Error!") 8 9 10# Shi-Tomasi法のパラメータ(コーナー:物体の角を特徴点として検出) 11ft_params = dict(maxCorners=100, # 特徴点の最大数 12 qualityLevel=0.3, # 特徴点を選択するしきい値で、高いほど特徴点数は厳選されて減る。 13 minDistance=7, # 特徴点間の最小距離 (特徴点から近い点は、特徴点としない) 14 blockSize=7) # 特徴点の計算に使うブロック(周辺領域)サイズ 15 16# Lucas-Kanade法のパラメータ(追跡用) 17lk_params = dict(winSize=(15, 15), # オプティカルフローの推定の計算に使う周辺領域サイズ 18 maxLevel=2, # ピラミッド数 (デフォルト0:2なら1/4画像まで使用) 19 criteria=(cv2.TERM_CRITERIA_EPS | cv2.TERM_CRITERIA_COUNT, 10, 0.03)) 20 21while cap.isOpened(): 22 23 ret, frame = cap.read() 24 gray1 = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) 25 26 27 28 ft1 = cv2.goodFeaturesToTrack( 29 gray1, mask=None, **ft_params) 30 mask = np.zeros_like(frame) 31 32#動画が読み込めているとき 33 if ret == True: 34 # HSVに変換 35 hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV) 36 37 # 泳者のHSV範囲 38 lower_white = np.array([60,40,80]) 39 upper_white = np.array([200,240,180]) #精度高め[145,170,133] 40 41 # 泳者以外にマスク 42 mask_white = cv2.inRange(hsv, lower_white, upper_white) 43 res_white = cv2.bitwise_and(frame,frame, mask= mask_white) 44 45 # 動画終了まで繰り返し 46while(cap.isOpened()): 47 # 次のフレームを取得し、グレースケールに変換 48 res_white = cap.read() 49 gray2 = cv2.cvtColor(res_white, cv2.COLOR_BGR2GRAY) 50 51 52 53 # Lucas-Kanade法でフレーム間の特徴点のオプティカルフローwp計算 54 ft2, status, err = cv2.calcOpticalFlowPyrLK( 55 gray1, gray2, ft1, None, **lk_params) 56 57 # オプティカルフローを検出した特徴点を取得(1なら検出) 58 good1 = ft1[status == 1] # 1フレーム目 59 good2 = ft2[status == 1] # 2フレーム目 60 61 # 特徴点とオプティカルフローをフレーム・マスクに描画 62 for i, (pt2, pt1) in enumerate(zip(good2, good1)): 63 x1, y1 = pt1.ravel() # 1フレーム目の特徴点座標 64 x2, y2 = pt2.ravel() # 2フレーム目の特徴点座標 65 66 # 軌跡を描画(過去の軌跡も残すためにmaskに描く) 67 mask = cv2.line(mask, (x2, y2), (x1, y1), [0, 0, 200], 2) 68 69 # 現フレームにオプティカルフローを描画 70 frame1 = cv2.circle(res_white, (x2, y2), 5, [0, 0, 200], -1) 71 72 # フレームとマスクの論理積(合成) 73 img = cv2.add(frame1, mask) 74 cv2.imshow('res',res_white) 75 cv2.imshow('mask', img) 76 gray1 = gray2.copy() # 次のフレームを最初のフレームに設定 77 ft1 = good2.reshape(-1, 1, 2) # 次の点を最初の点に設定 78 if cv2.waitKey(1) & 0xFF == ord('q'): 79 80 81 82 83 break 84 85#動画が読み込めない(終了)したとき 86 else: 87 print('end') 88 break 89 90cap.release() 91cv2.destroyAllWindows() 92 93

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

IndentationError: unexpected indent
とは
IndentationError:予期しないインデント
です。

インデントが正しいか確認することで直るエラーです。

また、if ret == Trueは
if ret:
とすることが可能です。

投稿2020/12/24 07:24

編集2020/12/24 07:27
norapomu

総合スコア224

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問