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() ```
回答1件
あなたの回答
tips
プレビュー