###実現したいこと・わからないこと
輪郭のわかっている画像中で、指定した物体だけの輪郭と面積情報の抽出を行いたいです。
現状では以下の画像のように全面にわたって物体の輪郭を検出し、輪郭描画できている状態ですが、
中央の一番大きい円形物だけの情報抽出の仕方がわかりません。
ソースコードを以下に示します。
######ソースコード
Python
1import cv2 2 3#Step1.画像の読み込み('filename',0(gray scale) or 1(BGR)) 4img = cv2.imread('img31.tif') 5im_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) 6#読み込んだ画像は、imgの中に[高さ, 幅, (blue, green, red)]のnumpy_arrayとして読み込まれている。 7 8#Step2.二値化の前処理(ぼかし) 9img_blur = cv2.GaussianBlur(im_gray, (5,5),0) 10 11#Step3.二値画像を取得(適応的しきい値処理)と出力 12th = cv2.adaptiveThreshold(img_blur,255,cv2.ADAPTIVE_THRESH_GAUSSIAN_C,\ 13 cv2.THRESH_BINARY,11,2) 14cv2.imwrite('Thresholded Image.png', th) 15cv2.imshow('Thresholded Image', th) 16 17#Step3.二値化した画像の白黒を反転させて出力 18th_inv = cv2.bitwise_not(th) 19cv2.imshow('hanten',th_inv) 20 21#Step4.輪郭を抽出する 22contours, hierarchy = cv2.findContours(th_inv, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE) 23 24#Step.5検出した輪郭内の面積および輪郭線描画の出力 25for i in range(len(contours)): 26 im_con = th.copy() 27 print('ID', i, 'Area', cv2.contourArea(contours[i])) 28 im_con = cv2.drawContours(im_con, contours, i, (190,0,0), 2) 29 cv2.imwrite('result' + str(i) + '.png', im_con)
現状では、別コードにてcv2.drawContours(im_con, contours, 20, (190,0,0), 2)
の第3引数の検出された物体の番号を指定し、対処している状況です(下図)。
###解決したい点
Step5.のfor文の中で、画像全面にわたって検出された輪郭内の面積表示と輪郭線描画を行っていますが、この画像に対する検出が58点もあるため、大量に保存されてしまいます。たとえば、Area=500.0以上を表示・描画・保存できるように指定するにはどのようにしたら良いでしょうか。
お力添えいただきたく存じます。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/01/20 04:42