https://end0tknr.hateblo.jp/entry/20171028/1509188265
随分以前に記載した上記entryでは、 Hough変換による直線検出を使用していますが、 LSDの存在を知ったので、お試し
https://pypi.org/project/ocrd-fork-pylsd/
install pylsd
✕ $ pip install pylsd ○ $ pip install ocrd-fork-pylsd
python script
インターネットで検索すると、 opencvのcv2モジュールを使用した例が多いようですが、 今回は、Pillow(PIL)を使用しています。
#!python # -*- coding: utf-8 -*- import numpy as np import os import sys import PIL.Image import PIL.ImageDraw from pylsd.lsd import lsd def main(): fullName = sys.argv[1] folder, imgName = os.path.split(fullName) img = PIL.Image.open(fullName) # fileの読込み gray = np.asarray(img.convert('L')) # グレースケール化 lines = lsd(gray, sigma_scale=2) # 直線検出 # 元画像に検出した線分を追記 print( lines ) draw = PIL.ImageDraw.Draw(img) for i in range(lines.shape[0]): pt1 = (int(lines[i, 0]), int(lines[i, 1])) pt2 = (int(lines[i, 2]), int(lines[i, 3])) width = lines[i, 4] draw.line((pt1, pt2), fill=(255,0,0), width=int(np.ceil(width / 2))) # fileとして保存 img.save(os.path.join(folder, 'PIL_' + imgName.split('.')[0] + '.png')) if __name__ == '__main__': main()
上記を実行すると、以下のようなpngが作成されます