2017-01-25 7 views
0

私は画像のデータセットでテキスト認識を行ってきました。私は、コンポーネントを使って画像の文字を分割し、閾値化された画像の輪郭を探したいと思う。しかし、文字の多くは、画像内の他のコンポーネントと互いにマージされます。OpenCV - テキストセグメンテーションにおける文字の輪郭の分離

私はそれらを分けるためのアイデアを教えていただけますか?助けてくれてありがとう!以下は

いくつかの例であり、私のコードの一部:

Mat placa_contornos = processContourns(img_placa_adaptativeTreshold_mean); 
vector<vector<Point>> contours_placa; 
findContours(placa_contornos, 
      contours_placa, 
      CV_RETR_EXTERNAL, externos) 
      CV_CHAIN_APPROX_NONE); 
vector<vector<Point> >::iterator itc = contours_placa.begin(); 
while (itc != contours_placa.end()) { 
    //Create bounding rect of object 
    Rect mr = boundingRect(Mat(*itc)); 
    rectangle(imagem_placa_cor, mr, Scalar(0, 255, 0)); 
    ++itc; 
} 
imshow("placa con rectangles", imagem_placa_cor); 

Results examples

original image, binarized image, result

+0

元のイメージと2値化されたイメージを置くと役立ちます。 – ilke444

+0

あなたのコメント@ like444ありがとう、私は元の画像を1つの画像を置く説明で、それは結果です。助けてくれてありがとう。 – Alexander33

+1

また骨格化を試みることができます –

答えて

0

私はそれができますかどうかを確認するために、バイナリイメージの詳細を侵食しようとするだろう。あなたはまた、スキューを固定して、文字も

を結ぶ一番下の行を削除しようとする場合があります、これは関連するかもしれない: Recognize the characters of license plate

+0

ありがとう@ブラッド、私はまた、私は排除したい、上の行と下の行を持つ多くの画像が、どのように私は行を排除できますか? – Alexander33

+0

私は同様の問題に取り組んだとき、Matの各行をチェックして白いピクセルがたくさんあるかどうかを調べることができました。しかし、この方法は、スキューを補正できる場合や角度が一定の場合にのみ有効です。そうでなければ、おそらく別のライン検出方法が動作するかもしれません – brad

0

あなたの閾値化画像上opening operationを試すことができ、ノイズを取り除くために。必要に応じてカーネルサイズを調整することができます。

// Get a rectangular kernel with size 7 
Mat element = getStructuringElement(0, Size(7, 7), Point(1, 1)); 
// Apply the morphology operation 
morphologyEx(placa_contornos, result, CV_MORPH_OPEN, element); 

しきい値設定された画像で次の中間出力が得られます。検出が向上すると思います。

enter image description here