3

次のコードがあります。これは、openCV 3.0 で接続されたコンポーネント機能を使用する方法を学習するための単純なテスト プログラムです。

int main(int argc, char** argv) {

char* line = argv[1];

Mat image;

image = imread(line,CV_LOAD_IMAGE_GRAYSCALE);   

cv::Mat label=Mat(image.size(),CV_16U);

int la=connectedComponents(image,label, 8,CV_16U);

    //tried also: label.convertTo(label,CV_8U,255);   
   // and label.convertTo(label,CV_16U,255);

namedWindow( "input", CV_WINDOW_AUTOSIZE );
imshow( "input", image);

    namedWindow( "ouput", CV_WINDOW_AUTOSIZE );
    imshow("output", label);
    cout<<la<<"\n";

    imwrite("output.png", label);
    waitKey(0);
    return 0;
    }

入力イメージは、白い背景に 2 つの赤い正方形があるカラー イメージです。イメージが正しく読み込まれ、グレースケール イメージとして表示されます。 プログラム出力

問題は、私が何をしても、パラメータに応じて、出力は常に黒または白の空白の画像convertToです。

ただし、によって返される値connectedComponentsは 2 です。

私はミキによって提案された完全なコードを試しました、私はこれを得ます:

ここに画像の説明を入力

問題は、接続されたコンポーネントが正しく機能していない可能性があると考えました。

デスクトップにある写真を試してみたところ、最終的に何かが得られました:

ここに画像の説明を入力

ただし、今回のソース画像は人、建物、車などの通常の写真であり、出力のほとんどはまだ空白です。理由を知っている人はいますか?

追加後image = image < 200;

ここに画像の説明を入力

を使用applyColorMap(seeMyLabels, seeMyLabels, COLORMAP_JET);すると、ラベルの画像はほぼ黒のグレースケールから青の色合いになります

ここに画像の説明を入力

4

1 に答える 1