画像の細線化(スケルトン化)
2020/11/21
Python3.8.2, OpenCV4.4.0, Scikit-Image0.17.2
画像を線画にする処理をスケルトン化というらしい。
dst = cv2.ximgproc.thinning(image, thinningType=cv2.ximgproc.THINNING_ZHANGSUEN)
thinningTypeには
cv2.ximgproc.THINNING_ZHANGSUEN
cv2.ximgproc.THINNING_GUOHALL
がある。
OpenCVによる細線化.(スケルトン化)
https://emotionexplorer.blog.fc2.com/blog-entry-200.html
以下、OpenCVに細線化がないと思い込んでいたので、Scikit-Imageという別の画像処理ライブラリを使った方法。
(Python3.8.2, OpenCV4.4.0, Scikit-Image0.17.2)
Scikit-Imageのインストール
pip install scikit-image
スケルトン化
import cv2
import numpy as np
from skimage.morphology import skeletonize
img = cv2.imread(img_path)
#2値化
img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
img = cv2.GaussianBlur(img,(5,5),0)
ret,img = cv2.threshold(img,0,255,cv2.THRESH_BINARY+cv2.THRESH_OTSU)
#細線化(スケルトン化)
ske = skeletonize(~(img != 0))
ske_gray = (ske * 255).astype(np.uint8)
ske_rgb = cv2.cvtColor(ske_gray, cv2.COLOR_GRAY2RGB)
#結果の表示
cv2.imshow('test',ske_rgb)
cv2.waitKey(0)
cv2.destroyAllWindows()
ラスター画像からベクター画像への変換について
https://teratail.com/questions/244128
Scikit-Imageの細線化(Skeletonize)をOpenCVと組み合わせて試す。
https://emotionexplorer.blog.fc2.com/blog-entry-198.html