end0tknr's kipple - 新web写経開発

http://d.hatena.ne.jp/end0tknr/ から移転しました

opencv.erode() / dilate() による画像の膨張処理 / 収縮処理

Python OpenCV3で画素の膨張処理(dilation)と収縮処理(erosion) (ちょっと解説も) | from umentu import stupid

ほぼ、上記urlのまんま.

細線消去に関しては、 medianBlur() による中央値処理より、dilate() の方が良い気がします。

#!/usr/local/bin/python
# -*- coding: utf-8 -*-
import cv2
import numpy as np
import sys

def main():
    org_file = sys.argv[1]

    # 強制的にグレー画像として読む
    # http://opencv.jp/opencv-2.1/cpp/reading_and_writing_images_and_video.html
    img = cv2.imread(org_file, 0)
    cv2.imwrite('org.png', img)

    ret, img_new = cv2.threshold(img,
                                 200,               # 閾値
                                 256,               # 画素値の最大値
                                 cv2.THRESH_BINARY) # 2値化type


    # 近傍の定義
    neiborhood = np.array([[0, 1, 0],
                           [1, 1, 1],
                           [0, 1, 0]],
                           np.uint8)

    # 収縮
    img_new = cv2.dilate(img_new,
                         neiborhood,
                         iterations=2)
    # 膨張
    # img_new = cv2.erode(img_new,
    #                     neiborhood,
    #                     iterations=2)
    
    cv2.imwrite('new.png', img_new)


if __name__ == '__main__':
    main()

↑こう書くと↓こう変換されます

f:id:end0tknr:20171103163626p:plain:w350 f:id:end0tknr:20171104055146p:plain:w270 f:id:end0tknr:20171104055704p:plain:w270