10

私は侵食と膨張プロセスで数字の周りのものを排除しようとしています. 試してみましたが、何も起こりませんでした。何かが変わるかどうかを確認するためだけに値を変更しましたが、何も変わっていません。画像は上のリンクのように続きます。このパラメーターはどうですか...ドキュメントを読みましたが、よくわかりません(ご覧のとおり、関数で推測していました)。私は何を間違っていますか?

画像: https://docs.google.com/file/d/0BzUNc6BOkYrNeVhYUk1oQjFSQTQ/edit?usp=sharing

コード:

#include <opencv2/imgproc/imgproc.hpp>
#include <opencv2/highgui/highgui.hpp>

using namespace cv;

int main ( int argc, char **argv )
{
    Mat im_gray;
    Mat img_bw;
    Mat img_final;

    Mat im_rgb  = imread("cam.jpg");
    cvtColor(im_rgb,im_gray,CV_RGB2GRAY);


    adaptiveThreshold(im_gray, img_bw, 255, ADAPTIVE_THRESH_MEAN_C, THRESH_BINARY_INV, 105, 1); 


    dilate(img_bw, img_final, 0, Point(-1, -1), 2, 1, 1);


    imwrite("cam_final.jpg", img_final);

    return 0;
}  
4

2 に答える 2

19

公式ドキュメントによると、3 番目の引数はカーネル (または構造化要素) である必要があります。現在 0 を渡しています:

dilate(img_bw, img_final, 0, Point(-1, -1), 2, 1, 1);

次のように書き直してみてください。

dilate(img_bw, img_final, Mat(), Point(-1, -1), 2, 1, 1);

この場合、デフォルトの 3x3 カーネルが使用されます。

于 2013-06-26T20:45:07.957 に答える
1

カーネルは基本的にマトリックスです。これは、入力行列 (画像) で乗算またはオーバーラップされ、目的の出力が変更された (この場合は拡張された) 行列 (画像) が生成されます。

基本的にカーネルのピクセル数 (高さと幅) を変更しているパラメータを変更してみてください。これにより、元の写真の膨張効果が変更されMat()ます 。dilate(img_bw, img_final, Mat(), Point(-1, -1), 2, 1, 1);

そのため、esenti で既に述べたように、数値の代わりに使用するパラメーターdilateを使用します。Mat()

于 2014-01-07T18:05:57.543 に答える