在C++中用OpenCV删除小区域

2024-06-28 11:16:13 发布

您现在位置:Python中文网/ 问答频道 /正文

我设法用堆栈溢出时发现的Python代码做了我需要的事情:

gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
labelnum, labelimg, contours, GoCs = cv2.connectedComponentsWithStats(gray)
for label in xrange(1, labelnum):
    x,y,w,h,size = contours[label]
    if size <= N:
         img_white[y:y+h, x:x+w] = 0
cv2.imwrite("img_filter.png", img_white)

它通过访问轮廓元素成功地去除了小区域(小水滴和粒子)。在

我想在C++中做这件事。有可能吗?我发现了这个函数:

^{pr2}$

但我不知道如何访问轮廓元素。 有小费吗?在


Tags: 代码元素imgsize堆栈事情cv2label
2条回答

也许只是破坏你的形象应该有帮助。在

Morphological Transformations OpenCV

stats输出数组包含CC_STAT_AREA列,它将以像素为单位显示连接组件的面积。在

过滤小于N的组件的代码将应用条件if (stats.at<int>(label, CC_STAT_AREA) < N) {…}。检查给定的完整示例in this post

请注意,连接的组件不会提供轮廓,只提供连接区域的统计信息。您需要使用OpenCV的findContours函数来获得沿区域轮廓的所有点的列表。在

相关问题 更多 >