3

画像は次のとおりです。

ここに画像の説明を入力

黒い円を白に、残りを黒に設定する方法を知りたいです。

(したがって、白い領域内の黒い円をセグメント化します)。

画像を反転すると円が白くなることはわかっていますが、この画像に表示されている黒い部分全体も同様です。

matlab でこれを行う必要がある場合は、接続されたコンポーネントの操作を行い、BLOB の循環性を確認します。私はこれをopencvで行う必要がありますが(正確にはjavacvです。)

opencv (javacv) でこれを行う簡単な方法はありますか。

事前にThx

4

2 に答える 2

2

OpenCV には と を使用する簡単な方法がfindContours()ありdrawContours()ます。の階層バージョンを使用すると、階層findContours()を調べて、白いクワッドの子輪郭のみを描画 (塗りつぶし) できます。これには、必要に応じてサニティ チェックを実行できるという追加の利点があります (たとえば、輪郭のサイズをチェックして、期待するサイズに近いかどうかを確認します)。Java や javacv については何も知りませんが、opencv に含まれている findcontours の C++ の例を参考にしてみてください。

于 2012-03-31T21:09:17.233 に答える
0

openCVライブラリを使用して(Javaアダプタを介して)、画像上の画像オブジェクトを検出できます。そのためには、サークルのネットワークをトレーニングする必要があります。

まさにあなたのケース(おそらくこのソリューションは一般的ではないでしょう)に関して、画像をセグメントに分割し、条件として使用して色を変えることができます。以下の擬似コードを参照してください。

//build color switching list
List<Point> colorSwitches = ...
for(each horizontal line from image){
    for(each pixel from line){
        if(color of previous pixel != color of current pixel){
            colorSwitches.add(currentPoint)
        }
    }    
}
// so, you have detected margins of your image objects; now we need to merge neighbor pixels into image objects, where image object is collection of margin points(you should create this class)
List<ImageObject> imageObjects = ...
for(each color switch){
    if(current pixel is connected with pixels from existing image objects){
        // returns image object neared with current point
        getRelatedImageObject(imageObjects).add(currentPoint);
    }else{
        imageObjects.add(new ImageObject(currentPixel));
    }
}
// now we have list of objects from image, and we need to match objects

わかりました、必要なことを行う方法の一般的な行です。より正確に必要な場合は、より詳細に説明しようとします。また、私に直接連絡することもできます

それがあなたを助けることを願っています。

于 2012-03-31T20:17:43.040 に答える