画像から孤立したピクセルを削除しようとしています。
私は使用することを考えました:
cvErode(img, img, 0, 1);
問題は、次のカーネルが必要なことです。
0 0 0
0 1 0
0 0 0
私はそれを行う方法がわかりません。誰でも助けることができますか?
画像から孤立したピクセルを削除しようとしています。
私は使用することを考えました:
cvErode(img, img, 0, 1);
問題は、次のカーネルが必要なことです。
0 0 0
0 1 0
0 0 0
私はそれを行う方法がわかりません。誰でも助けることができますか?
質問のタイトルを読み直した後、あなたが欲しいものがわかりました。あなたはヒットオアミスのモルフォロジー演算子を求めています。あなたが説明したカーネルは、実際には、ヒットオアミスを実行する関数としては完全に3x3の正方形です。OpenCVはそれをサポートしていないようですが、各ポイントの近傍を簡単に分析することで、必要な機能を実行できます。ポイントが他のポイントに接続されていない場合は、削除します。
これが私の5セントのイベントですが、openCVはまったく知りません。
ただし、「開く」という関数を探すことを検討する必要があります。これは侵食とそれに続く拡張です。これにより、小さな孤立したピクセルが削除されます。もちろん、削除される要素のサイズは、使用するカーネルによって異なります。
もう1つのオプションは、画像のローパスフィルタリングを実行するための関数を見つけることです。
あなたが何をするかというと、それは2つのステップに帰着します。関数を呼び出してカーネルを作成します。別の関数を使用して、カーネルをイメージに適用します。
あなたが何をしても!「侵食」機能を使用しないでください。また、残りの画像の要素も変更されます。その場合は、必ず「開く」機能を使用する必要があります。
ここで、3番目の引数としてNULLを渡すことにより、デフォルトのカーネルを設定しています。
http://docs.opencv.org/modules/imgproc/doc/filtering.html?highlight=erode#getstructuringelementを使用し、出力をerode関数の引数として渡す必要があります。
この関数でカーネルを生成できない場合。IplConvKernel要素を手動で作成するだけです。
新しい 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);
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 :)