下のコードは画像から特定色を認識するコードです。
このコードで赤色のものを写した画像を認識させると問題なく認識して周りに長方形が描出されるのですが、赤色のものを除いて背景のみの画像で実行すると明らかに赤じゃないところ、しかも限りなく小さいものまで赤として認識して四角で囲ってしまいます(下にその写真を載せています)。おそらく、後半のコーデが面積が最大のものを抽出するというふうになっているのが問題だと思います。
そこで、面積を指定してそれ以上の面積のものを認識できるようにしたいのですが、どのようなコードを組めばよいでしょうか。
また、面積が大きいものをご認識しれしまうこともあると思うので面積を指定する以外にも方法があったら、教えてほしいです。
・変更したコード
import cv2 import numpy as np def find_rect_of_target_color(image): hsv = cv2.cvtColor(image, cv2.COLOR_BGR2HSV_FULL) h = hsv[:, :, 0] s = hsv[:, :, 1] mask = np.zeros(h.shape, dtype=np.uint8) mask[(h > 240) & ((150 > s) & (s < 100))] = 255 mask, contours, hierarchy = cv2.findContours(mask, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE) rects = [] for contour in contours: approx = cv2.convexHull(contour) rect = cv2.boundingRect(approx) rects.append(np.array(rect)) return rects img = cv2.imread('/home/pi/picture/test1.png') rects = find_rect_of_target_color(img) if len(rects) > 0: rect = max(rects, key=(lambda x: x[2] * x[3])) cv2.rectangle(img, tuple(rect[0:2]), tuple(rect[0:2] + rect[2:4]), (0, 0, 255), thickness=2) cv2.imshow("red", img) cv2.waitKey(0) cv2.destroyAllWindows()
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2019/11/01 18:01
2019/11/01 18:44 編集
退会済みユーザー
2019/11/02 02:51
退会済みユーザー
2019/11/02 04:18
退会済みユーザー
2019/11/02 04:42
2019/11/02 04:45
退会済みユーザー
2019/11/02 05:03 編集
2019/11/02 05:10 編集
退会済みユーザー
2019/11/02 05:55 編集
2019/11/02 05:49 編集
2019/11/02 05:52
退会済みユーザー
2019/11/02 05:57 編集
2019/11/02 06:10 編集
退会済みユーザー
2019/11/02 07:23 編集