如何在openCV中对连接的组件进行分割?
Posted
技术标签:
【中文标题】如何在openCV中对连接的组件进行分割?【英文标题】:How to do segmentation of connected components in openCV? 【发布时间】:2017-06-06 15:29:45 【问题描述】:我必须分割this Image 中的每个单独元素。我已将原始图像转换为阈值二值图像,然后应用了一些形态膨胀。然后我应用 cv::connectedComponents 函数来标记每个连接的组件。现在我想裁剪它们,如何使用 c++ 和 openCV 来实现?
【问题讨论】:
他们已经应该有一个标签......所以你可以循环像素并获取数字,然后将具有所需标签的那些复制到另一个图像。您也可以使用您在此示例中创建的掩码进行复制,例如copyImage.setTo(cv::Scalar(255,255,255), labelImage == 4)
在此示例中 4 是所需的标签
【参考方案1】:
如果不使用 connectedComponents 而是使用 connectedComponentsWithStats,您应该有足够的信息来裁剪每个标记的对象。
【讨论】:
谢谢@TFreitas !!考虑到我是 openCV 的新手,您能否更详细地解释一下如何裁剪各个元素?我打印了函数返回的连接组件的数量,即 559,现在我想将它们分开吗?怎么做 ?请帮我解决这个问题。 wil connectedComponentsWithStats 您将拥有一个带有每个对象统计信息的 Mat: cv::Mat labels, stats, centroids; int numberofObjects = cv::connectedComponentsWithStats(图像,标签,统计,质心,8,CV_16U);如果您在文档中看到,您会看到这些统计信息具有每个对象边界框的长度和高度。要削减它们,只需将属性访问为: for (int label = 1; label (label, CC_STAT_HEIGHT);高度 = stats.at以上是关于如何在openCV中对连接的组件进行分割?的主要内容,如果未能解决你的问题,请参考以下文章