2017-08-25 13 views
0

境界線をイメージ内で明確に定義するツールはありますか? 私はPython-OpenCVを使用しています。この機能のための方法はありますか?オブジェクトの境界を明確に定義するにはどうすればよいですか?

たとえば、

このように入力してください。

enter image description here

あなたは、境界上のいくつかの障害を見ることができます。いくつかのピクセルはちょうど境界から突出しています。境界線は完全な直線ではありません。

このような出力が必要です。

enter image description here

+0

アルゴリズムはあなたが達成したいのかを推測する方法を

これがうまく動作するように見えましたか?黒いピクセルから最も近い白いピクセルまでの距離がx(文字ラインの幅)より大きくならないような仮定をすることはできますか?または、ターゲットテンプレートのセットがありますか? – Micka

答えて

1

あなたはOCRを行うことができ、その後、希望のフォントで結果を印刷します。あなたの入力イメージを完全に望ましい形状に変換する他の方法はありません。

+0

これは質問に対する答えを提供しません。批評をしたり、著者の説明を求めるには、投稿の下にコメントを残してください。 - [レビューの投稿](レビュー/低品質の投稿/ 17217175) – meowgoesthedog

+0

質問は次のとおりです。「イメージ内に境界を明確にするツールはありますか?答えは「完全な」オブジェクトの輪郭を再構成するために、あなたが満たすことができるオブジェクトに関する情報が必要であるため、OCRツールです。手紙を使って作業する場合、「完全な」形状に関する情報はフォント文字の形で保存されます。 OCRを行う場合は、完全な形で印刷できます。 –

2

画像内の輪郭をcv2.findContours()で検出し、その輪郭を線で近似することができます。 OpenCV contours tutorialの輪郭近似のセクションを参照してください。チュートリアルでは、ボックスの内部を撮影するパーツはギザギザになる可能性がありますが、輪郭の近似は描画するのに良い直線を与えるだけです。あなたはKを同じように考えることができます、全体的な輪郭は箱のようですが、内部に浸している部分があります。

import cv2 
import numpy as np 

img = cv2.imread('k.png', 0) # read as grayscale 
img = 255 - img # flip black and white 

# find contours in the image 
bin_img = cv2.threshold(img, 127, 255, cv2.THRESH_BINARY)[1] 
mode = cv2.RETR_EXTERNAL 
method = cv2.CHAIN_APPROX_SIMPLE 
contours = cv2.findContours(bin_img, mode, method)[1] 

# take largest contour, approximate it 
contour = contours[0] 
epsilon = 0.005 * cv2.arcLength(contour, True) 
approx_contour = cv2.approxPolyDP(contour, epsilon, True) 

contour_img = np.zeros_like(img) 
contour_img = cv2.fillPoly(contour_img, [approx_contour], 255) 
contour_img = 255 - contour_img # flip back black and white 

cv2.imshow('Fixed k', contour_img) 
cv2.waitKey() 

入力: Input K

出力: Approximated contours of K

関連する問題