c – OpenCV 3.0已连接的组件,无法使其正常工作
发布时间:2020-12-16 10:01:13 所属栏目:百科 来源:网络整理
导读:我有以下代码,它只是一个简单的测试程序,用于学习如何在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=con
我有以下代码,它只是一个简单的测试程序,用于学习如何在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(参见MyLabels,参见MyLabels,COLORMAP_JET);,标签图像从几乎黑色灰度变为蓝色阴影 解决方法
结果在那里,你只是看不到它们!
label包含每个标签的索引.这意味着,在这种情况下,在标签中,您有像素值: 0 : background 1 : first connected component 2 : second connected component 所以你的形象很暗.仅出于可视化目的,您可以添加以下行: Mat seeMyLabels; normalize(label,seeMyLabels,255,NORM_MINMAX,CV_8U); imshow("Labels",seeMyLabels); 这会将值缩放到可见范围. 请注意,图像应为二进制图像,黑色背景和白色前景. 完整代码: #include <opencv2opencv.hpp> using namespace cv; int main(int argc,char** argv) { if (argc != 2) return -1; Mat image = imread(argv[1],IMREAD_GRAYSCALE); if (image.empty()) return -1; Mat label; int la = connectedComponents(image,CV_16U); Mat seeMyLabels; normalize(label,CV_8U); // You can apply a colormap for better visualization //applyColorMap(seeMyLabels,COLORMAP_JET); imshow("Labels",seeMyLabels); imshow("input",image); imshow("output",label); waitKey(0); return 0; } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |