質問をすることでしか得られない、回答やアドバイスがある。

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

新規登録して質問してみよう
ただいま回答率
85.47%
Raspberry Pi

Raspberry Piは、ラズベリーパイ財団が開発した、名刺サイズのLinuxコンピュータです。 学校で基本的なコンピュータ科学の教育を促進することを意図しています。

Python

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

Q&A

解決済

1回答

1445閲覧

USBカメラ画像を取り込むと現在の画像でなく、過去の画像が取り込まれてしまう。

nao99

総合スコア10

Raspberry Pi

Raspberry Piは、ラズベリーパイ財団が開発した、名刺サイズのLinuxコンピュータです。 学校で基本的なコンピュータ科学の教育を促進することを意図しています。

Python

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

0グッド

0クリップ

投稿2020/04/02 10:06

編集2020/04/03 02:43

USBカメラで、GPIO(10)の入力信号ONのタイイングで、テンプレート画像(temp)を取り込みテンプレートマッチングの準備完了。
その後、GPIO(9)の入力信号ONのタイミングで、ターゲット画像(target)を取り込み、tempとtargetのテンプレートマッチングを行いたい。

しかし、プログラム起動初期は時間差はさほど感じられないが、target画像を、2,3回入力信号を入力していると、数秒、しばらく時間を空けると数分前の画像が取り込まれてしまう。

【code】

import RPi.GPIO as GPIO import os import cv2 import time GPIO.setmode(GPIO.BCM) GPIO.setup(4, GPIO.OUT)#判定OK出力 GPIO.setup(9, GPIO.IN, pull_up_down=GPIO.PUD_DOWN)#ターゲット画[target]像取り込みトリガー入力 GPIO.setup(10,GPIO.IN, pull_up_down=GPIO.PUD_DOWN)#テンプレー[temp]ト画像取り込みトリガー入力 GPIO.setup(14, GPIO.OUT)#信号NG出力 c = cv2.VideoCapture(0) try: while True: if(GPIO.input(9)==1): def Judge_Matching(num):#テンプレートマッチング判定定義 if 0.9 < num: print("OK") cv2.rectangle(target, top_l, bottom_r, (0, 255, 0), 2) # 検出領域を四角で描画 GPIO.output(4, GPIO.HIGH) time.sleep(4) else: print("NG") cv2.rectangle(target, top_l, bottom_r, (0, 0, 255), 2) # 検出領域を四角で描画 GPIO.output(14, GPIO.HIGH) time.sleep(4) temp = cv2.imread('/home/pi/result/temp0.jpg') # テンプレート画像 g, target0 = c.read() cv2.imwrite('/home/pi/result/target0.jpg', target0) target = cv2.imread('/home/pi/result/target0.jpg') # ターゲット画像 #サーチ範囲指定 s_top = 10 s_bottom = 460 s_left = 20 s_right = 600 target1 = target[s_top : s_bottom, s_left : s_right] cv2.imwrite('/home/pi/result/target1.jpg', target1) cv2.rectangle(target, (s_left, s_top), (s_right, s_bottom), (255, 0, 0), 2) # テンプレートマッチを実行 r = cv2.matchTemplate(target1, temp, cv2.TM_CCOEFF_NORMED) min_v, max_v, min_l, max_l = cv2.minMaxLoc(r) top_l = (max_l[0] + s_left, max_l[1] + s_top) bottom_r = (top_l[0] + temp.shape[1], top_l[1] + temp.shape[0]) Judg = Judge_Matching(max_v) print(max_v) cv2.rectangle(target, (s_left, s_top), (s_right, s_bottom), (255, 0, 0), 2)#サーチ範囲を四角で描画 cv2.imshow('Judge', target) cv2.imwrite('/home/pi/result/result.jpg',target) cv2.waitKey(1000) # キー入力を待つ elif(GPIO.input(10)==1): #c = cv2.VideoCapture(0) #テンプレート画像(カメラ)取り込み r, img = c.read() cv2.imwrite('/home/pi/result/temp_orign.jpg', img) img = cv2.imread('/home/pi/result/temp_orign.jpg') img1 = img[38 : 366, 351 : 512] cv2.imwrite('/home/pi/result/temp0.jpg', img1) else: GPIO.output(4, GPIO.LOW) GPIO.output(14, GPIO.LOW) except KeyboardInterrupt: GPIO.cleanup() ```

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

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

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

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

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

t_obara

2020/04/02 11:34

コードは見やすくしてください。```で囲うようにすれば良いです。
nao99

2020/04/02 12:14

コメント有難うございます。 初心者なもので、’’’で、どのように囲えば良いのか分かりません。 投稿前の原文には、インデントもあるのですが、登校すると書式が反映されて無いようです。
t_obara

2020/04/03 00:52

時間情報をログとして出力するようにして、処理時間を確認して見てはいかがですか?画像のテンプレートマッチンングなど時間が非常にかかるものです。
nao99

2020/04/03 02:26

カメラ取込みでなく、画像ファイル(JPG)でのテンプレートマッチング(カメラ取込み以外は同内容)では、処理に1秒位くらいです。しかし、現在のソースコードでは、場合によっては、数分前の画像が”resultフォルダ”に保存され、マッチングを行っている状態です。
guest

回答1

0

ベストアンサー

ラズパイ環境はテレワークだ何だで崩してしまっていて試せませんが、
「条件が揃ったら画像を読み出す」のでなく、「画像は常に読み出しておき、必要なときだけ処理にまわす」ようにしてみたらどうなるでしょうか。

while True: r, img = c.read() #ここで常に読み出しはしておく if(GPIO.input(9)==1): #略 elif(GPIO.input(10)==1): #c = cv2.VideoCapture(0) #テンプレート画像(カメラ)取り込み #r, img = c.read() ここでは読まない

別件ですけど、

cv2.imwrite('/home/pi/result/temp_orign.jpg', img) img = cv2.imread('/home/pi/result/temp_orign.jpg')

これ、なんでわざわざ読み直してるのでしょう?

投稿2020/04/02 22:21

thkana

総合スコア7652

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

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

nao99

2020/04/03 03:24

ご回答有難うございます。 if文は、上記の修正、elif文を同様に修正して解決しました。 別件は、必要かと取りあえず書いて、後で必要であれば削除しようと考えてました。 無くても、動作しました。 有難うございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問