2017-04-17 15 views
0

背景OpenCVの:無視テキストのような輪郭

私は2Dの幾何学的形状が含まれている画像内のすべての輪郭を検出しますが、テキストのように見える何かを剥ぎたいです。

例入力: enter image description here

私たTesseractを介してテキスト領域を検出し、続いてそれらのテキスト領域を削除しようとしました。 OCR認識が良好な画像では、これがうまく動作するため、テキスト領域がかなりの割合で認識され、認識されたテキストの輪郭が削除されます。しかし、ほとんどの画像では、テキストがうまく認識されないので、画像から無関係なテキストの輪郭を取り除くことはできません。

私の質問は、どのように私は2Dの "幾何学的な"輪郭からテキストのような輪郭を区別できますか?

答えて

1

テキストを気にせず、それを取り除きたいのであれば、モードパラメータとしてRETR_EXTERNALfindCountours()関数に渡すだけで、外輪郭を検出することができます。それはあなたに最も外側の輪郭を与え、幾何学的形状の内部に含まれる何も無視します。

さらに制御したい場合は、モードパラメータをRETR_TREEとして渡してツリーを歩くことができます。トップレベルの輪郭のみを保持し、階層内のそのレベル以下は無視します。そうすれば、あなたはすべてを手に入れることができ、後であなたが守りたいものと無視したいことを決めることができます。

findCountours()がどのように階層(そのページはPythonチュートリアルのものですが、それに従うには十分に一般的です)については、OpenCVドキュメントのthis pageをお読みください。

もちろん、画像が常にあなたの質問で与えた例に似ている、つまりテキストが常に幾何学図形の内側にある場合にのみ機能します。あなたが形状の外にテキストを持っているなら、輪郭の大きさ(境界の長方形)を見て、特定の閾値以下のものを無視することができます(テキストの輪郭が幾何学的形状よりはるかに小さいと仮定して)。

+0

を組み合わせることができます。残念ながら、これは動作しません。なぜなら、私は入れ子レベルを知らないからです。私は外の矩形(これは私も離れて最適化する必要があります)を作成する例の隣接矩形を持っており、テキストは任意の入れ子の深さに現れることができます。編集:私はまた面積のサイズを比較することについて考えました - しかし、私はetxtも任意のサイズであることができるので、より洗練された何かを願っています。 – benjist

+0

おそらく2つの方法を組み合わせたものでしょうか? RETR_TREEを使用し、外接矩形の面積の差がxパーセントより大きい大きな輪郭の中の(2つ以上の)小さな輪郭のグループを探しますか?私は、アイデアを捨てるだけで、うんざりします。私はOCRでテキストを認識しようとするのは、テキストの内容を気にせず、形状の一部ではないものを除外したいからだと思います。テキストは常に特定の色、または限定された色のセットですか?たぶん、別の色で囲まれた黒または白のピクセルのグループを探しますか? –

+0

または、最初に画像にガウスぼかしを適用しますか?あなたがそれを十分にぼかしてしまえば、 'findCountours()'がそれを見つけられないくらいぼやけてしまうかもしれません。ちょっと別のアイデア... –

0

テキストに属する輪郭も、例に従った領域を表します。 偏心率硬度またはコンパクト性のようないくつかのプロパティを使用できるようにすることができます(ここでコード例を見つけることができます: EX用https://github.com/mribrahim/Blob-Detection

:規則的な形状などがコンパクト値を使用することによって区別することもできますし、私はより良い例を与えている必要があります実現する他のプロパティ