Bye Bye Moore

PoCソルジャーな零細事業主が作業メモを残すブログ

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