次のコードがあります。これは、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);
すると、ラベルの画像はほぼ黒のグレースケールから青の色合いになります