###環境
Python 3.7
Raspberry Pi 3 B
OpenCV インストール済
NumPy インストール済
###はじめに
先月からパイソンを学習し始めたばかりです。まだまだ初心者で分からないことばかりですので、温かい目でご教授ください。
正直、Python言語もNumPyについても、理解しきれていない状況ですがよろしくお願いします。
###やりたいこと
「入力した角度に応じて、画像処理を行う範囲を変える」ということをしたいです。
画像処理に関して調べていたところ、私がやりたいことと類似しているサイト様を見つけましたので、URLを貼らせていただきます。
https://non-it-engineer.com/?p=603
こちらのサイトに記載されていますコードを引用させていただきます。
python
1import cv2 2 3#認識範囲 4xmin,xmax = 240,440 5ymin,ymax = 120,360 6 7# 動画読み込みの設定 8#movie = cv2.VideoCapture('motion_in.mp4') 9movie = cv2.VideoCapture(0) 10 11# 背景差分の設定 12fgbg = cv2.bgsegm.createBackgroundSubtractorMOG() # 背景オブジェクト 13 14# ファイルからフレームを1枚ずつ取得して動画処理後に保存する 15while True: 16 ret, frame = movie.read() # フレーム取得 17 # フレームが取得できない場合はループを抜ける 18 if not ret: 19 break 20 detframe = frame[ymin:ymax,xmin:xmax] # 背景差分する範囲を指定 21 cv2.rectangle(frame,(xmin,ymin),(xmax,ymax),(0,0,255),2) # 指定範囲に赤枠 22 23 fgmask = fgbg.apply(detframe) # 前景領域のマスクを取得 24 moment = cv2.countNonZero(fgmask) # 動体検知した画素数を取得 25 text = 'Motion:' + str(moment) 26 font = cv2.FONT_HERSHEY_SIMPLEX 27 cv2.putText(frame,text,(20,400),font,1,(0,255,0),2,cv2.LINE_AA) #フレームに表示 28 29 cv2.imshow('frame',frame) 30 cv2.waitKey(1) 31 32# 撮影用オブジェクトとウィンドウの解放 33movie.release()
###質問
Q1:上のコードでまず、疑問に感じていることを教えてください
(1)20行目の“detframe”で画像処理を行う範囲を指定しているのでしょうか?
(2)21行目は、画像処理を行う範囲を見やすいように赤枠で囲んでいるだけでしょうか?
Q2:本題ですが、私は入力角に応じて画像処理範囲を変えたいです。そこで、下の画像(写真)のように、範囲を変えることは可能でしょうか?(ついでに、処理をしている範囲を赤枠で囲みたいのですが、これも可能でしょうか?)
各座標の求め方は
入力角=φとすると、
θA1=∠COA1
θB1=∠COB1
任意の点A=(r1cos(90+θA1+φ)+a, r1sin(90+θA1+φ)+b))
任意の点B=(r2sin(90-θB1+φ)+a, r2sin(90-θB1+φ)+b))
で求まると思います。
Q3:Q2が可能だった場合、フレームからはみ出した画像処理範囲はどうなるのでしょうか?きちんと、フレームの中のみ処理を行ってくれるのでしょうか?
それとも、エラーになってしまうのでしょうか?
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/07/01 07:59
2020/07/01 08:09 編集
2020/07/01 09:32