Bye Bye Moore

猫マンション建築の野望を胸に零細事業主として資本主義の荒波に漕ぎ出したアラサー男の技術メモ

Python3.6 + OpenCV3.1.1で加工範囲を限定してみる

Python3.6 + OpenCV3.1.1で加工範囲を限定してみます。
これで部分的にグレーにしたり、トラ模様にしたり一部分だけテンプレートマッチしたり……という事ができます。

実際のところ

shuzo-kino.hateblo.jp

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で指定した範囲だけ適用範囲になります。
f:id:shuzo_kino:20180110232620p:plain
【参考】範囲指定を特にしない場合
f:id:shuzo_kino:20180109202159p:plain