Python3.6 + OpenCV3.1.1で加工範囲を限定してみます。
これで部分的にグレーにしたり、トラ模様にしたり一部分だけテンプレートマッチしたり……という事ができます。
実際のところ
import numpy as np import cv2 import sys def function(target_file): #画像の読み込み img = cv2.imread(target_file) #エリア指定 ex = 160 ey = 160 #画像の特定部分の切り出し roi = img[0:ey, 0:ex] gray = cv2.cvtColor(roi, 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])
実行するとこんな感じ。
変数roiで指定した範囲だけ適用範囲になります。
【参考】範囲指定を特にしない場合