前提・実現したいこと
画像1(図形をマスクした画像)の輪郭を画像2にはっつけるプログラムを作っています。
その中で画像の輪郭を抽出し、その輪郭の大きさが10×10px未満のものを消去したいのですが、方法がわかりません。
また、消去したのちに、表示されている輪郭の数を数えたいのですが、print(len(contours))だと、消去前のものの数が出ると思います。
この二つを解決したいので助力お願いします。
現在、輪郭抽出のために使っているプログラムは以下の通りになります。
なお、二値化には大津の二値化を使用していますが、輪郭抽出するための画像は単純な図形のみが書かれた画像なので、二値化はかなりきれいにできていると思います。
一応画像1も載せておきます。画像2は同じ大きさの画像です。
該当のソースコード
python
1import cv2 2import matplotlib.pyplot as plt 3import numpy as np 4 5def rinkaku(img,img2): 6 img = cv2.bitwise_not(img) 7 img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) 8 ret, img_binary = cv2.threshold(img_gray, 0, 255,cv2.THRESH_OTSU) 9 contours, hierarchy = cv2.findContours(img_binary, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE)[1:] 10 img_contour = cv2.drawContours(img2, contours, -1, (128, 0, 255), 2) 11 print(len(contours)) 12 return img_contour, contours 13 14img = cv2.imread('mask.png') 15img2 = cv2.imread('origin.png') 16result = rinkaku(img,img2) 17cv2.imwrite("result.png", result)
試したこと・調べたこと
何かやくに立つかなと、輪郭の配列を見てみたのですが、なんのこっちゃわかりませんでした。
また、画像からノイズ除去すればよいのではないかと考えたのですが、輪郭がくっついたり、元の形のままにならなかったので、うまくいきませんでした。
どうか、解決のための助力お願いします。
回答1件
あなたの回答
tips
プレビュー