我有以下代码,它只是一个简单的测试程序,用于学习如何在 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;
}
输入图像是在白色背景上有两个红色方块的彩色图像。图像已正确加载并显示为灰度图像。
问题是无论我做什么,输出总是一个空白图像,黑色或白色,具体取决于convertTo
参数。
但是,返回的值connectedComponents
是 2。
我尝试了 Miki 提出的完整代码,我得到了这个:
我认为问题可能是连接的组件无法正常工作。
尝试了我桌面上的一张图片,终于得到了一些东西:
然而,这一次源图像是一张有人、建筑物、汽车……的常规图片,并且大部分输出仍然是空白的。有人知道为什么吗?
添加后image = image < 200;
使用applyColorMap(seeMyLabels, seeMyLabels, COLORMAP_JET);
,标签图像从几乎黑色灰度变为蓝色阴影