cv2.rectangleで足し算や引き算によって算出した値を引数とすることはできないのでしょうか?
下記コードではcv3.rectangleを5回使っていますが、その4回目のコードでinvalid syntaxが出てしまいます。
おそらく、x = 249-top_left[0]という変数を用いている事が原因だと考えていますが、エラーの発生しない書き方はありますでしょうか?
from google.colab import drive drive.mount('/content/drive') import cv2 import numpy as np from __future__ import print_function from scipy import ndimage import cv2 import glob import os SearchName = ["A","B","C","D"] count = 0 for name in SearchName: fname_img1 = "/content/drive/My Drive/sozai/mate/"+name+"/*.jpg" fname_img2='/content/drive/My Drive/template/ave/kako/temp3.jpg' out_dir = "/content/drive/My Drive/template/result/"+name os.makedirs(out_dir, exist_ok=True) list_f = glob.glob(fname_img1) print(list_f) for gazo in list_f: img = cv2.imread(gazo, 0) temp = cv2.imread(fname_img2, 0) #マッチングテンプレートを実行 match_result = cv2.matchTemplate(img, temp, cv2.TM_CCOEFF_NORMED) #検出結果から検出領域の位置を取得 loc=np.where(match_result ==np.max(match_result)) #検出領域を四角で囲んで保存 w, h = temp.shape[::-1] origine = cv2.imread(gazo) for top_left in zip(*loc[::-1]): bottom_right = (top_left[0] + w, top_left[1] + h) x = 249-top_left[0] cv2.rectangle(origine,(0,0), (249,top_left[1]), (0, 0, 0), -1) cv2.rectangle(origine,(0,top_left[1]), (top_left[0],bottom_right[1]), (0, 0, 0), -1) cv2.rectangle(origine,(bottom_right[0],top_left[1]), (bottom_right[0]+w,bottom_right[1], (0, 0, 0), -1) cv2.rectangle(origine,(x,top_left[1]), (249,bottom_right[1]), (0, 0, 0), -1) cv2.rectangle(origine,(0,bottom_right[1]),(249,249), (0, 0, 0), -1) #保存 #result = cv2.imread(gazo) #height = img.shape[0] #width = img.shape[1] #result = cv2.resize(img , (int(width*1.0), int(height*1.0))) #cv2.rectangle(result,top_left, bottom_right, (255, 0, 0), 10) basename = os.path.basename(gazo) out_dir = "/content/drive/My Drive/template/result/"+name+"/" out_path = os.path.join(out_dir,basename) cv2.imwrite(out_path,origine) count+= 1 以下エラーの内容 File "<ipython-input-5-79e0c9e128d3>", line 40 cv2.rectangle(origine,(x,top_left[1]), (249,bottom_right[1]), (0, 0, 0), -1) ^ SyntaxError: invalid syntax
ちなみに添付した写真のように塗りつぶしたいと考えています。
斜線部分が塗りつぶしたい箇所、空白部分は塗りつぶしたくない箇所になっています。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/11/05 13:00