実際のところ
黒背景、対象物は白という状況を作った場合を想定します。
import numpy as np import cv2 import sys def function(target_file): #画像の読み込み img = cv2.imread(target_file) gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) #二値化による輪郭の抽出 ret,thresh = cv2.threshold(gray,127,255,0) imgEdge,contours,hierarchy = cv2.findContours(thresh, 1, 2) #抽出された輪郭群をひとつひとつ処理 i = 0 for c in contours : cnt = c M = cv2.moments(cnt) #面積を求める area = cv2.contourArea(cnt) #ゴミを除外 if area < 1000 : continue # 円描画に必要な情報を計算 (x,y),radius = cv2.minEnclosingCircle(cnt) center = (int(x),int(y)) radius = int(radius) #外接円の描画 img = cv2.circle(img,center,radius,(0,255,0),2) print(str(i) + "番目:") print(" 面積:" + str(area)) i = i + 1 cv2.imshow("TEST", img) cv2.waitKey(0) cv2.imwrite("resutl2.png", img) if __name__ == '__main__': args = sys.argv function(args[1])
実行
実行すると、こんな感じになります
$ python sample_opencv_area.py base.png
端末出力にはこんな感じで
0番目: 面積:5284.0 1番目: 面積:2390.5