2

画像から孤立したピクセルを削除しようとしています。

私は使用することを考えました:

cvErode(img, img, 0, 1);

問題は、次のカーネルが必要なことです。

0 0 0
0 1 0
0 0 0

私はそれを行う方法がわかりません。誰でも助けることができますか?

4

5 に答える 5

0

質問のタイトルを読み直した後、あなたが欲しいものがわかりました。あなたはヒットオアミスのモルフォロジー演算子を求めています。あなたが説明したカーネルは、実際には、ヒットオアミスを実行する関数としては完全に3x3の正方形です。OpenCVはそれをサポートしていないようですが、各ポイントの近傍を簡単に分析することで、必要な機能を実行できます。ポイントが他のポイントに接続されていない場合は、削除します。

于 2012-12-07T17:52:54.247 に答える
0

これが私の5セントのイベントですが、openCVはまったく知りません。

ただし、「開く」という関数を探すことを検討する必要があります。これは侵食とそれに続く拡張です。これにより、小さな孤立したピクセルが削除されます。もちろん、削除される要素のサイズは、使用するカーネルによって異なります。

もう1つのオプションは、画像のローパスフィルタリングを実行するための関数を見つけることです。

あなたが何をするかというと、それは2つのステップに帰着します。関数を呼び出してカーネルを作成します。別の関数を使用して、カーネルをイメージに適用します。

あなたが何をしても!「侵食」機能を使用しないでください。また、残りの画像の要素も変更されます。その場合は、必ず「開く」機能を使用する必要があります。

于 2012-12-27T18:19:41.510 に答える
0

ここで、3番目の引数としてNULLを渡すことにより、デフォルトのカーネルを設定しています。

http://docs.opencv.org/modules/imgproc/doc/filtering.html?highlight=erode#getstructuringelementを使用し、出力をerode関数の引数として渡す必要があります。

この関数でカーネルを生成できない場合。IplConvKernel要素を手動で作成するだけです。

于 2012-12-07T07:10:39.410 に答える
0

新しい OpenCV 2.x API を使用している場合は、次のように実行できます。

cv::Mat kernel = (cv::Mat_<uchar>(3,3) << 0, 0, 0, 
                                          0, 1, 0, 
                                          0, 0, 0);
cv::erode(img, img, kernel);
于 2013-01-17T14:55:40.543 に答える
0

You can filter the image with custom kernels in opencv using filter2D function.

Look at the documentation

Documents are always a good source to start from :)

于 2012-12-07T02:12:00.817 に答える