我有以下代码,这只是一个简单的测试程序,用来学习如何在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);
,标签图像从近乎黑色的灰度变为蓝色调。
connectedComponents
,其中黑色为背景,白色为前景。你正在传递灰度图像。在调用connectedComponets
之前尝试添加这些行:image = image < 200;
- Miki