使用C ++中的OpenCV删除小区域

问题描述 投票:-2回答:2

我设法用我在Stack Overflow上找到的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 ++做到这一点。可能吗?我找到了这个功能:

int connectedComponentsWithStats(InputArray image, OutputArray labels, OutputArray stats, OutputArray centroids, int connectivity=8, int ltype=CV_32S)

但我不知道如何访问轮廓元素。有提示吗?

python c++ opencv
2个回答
1
投票

stats输出数组包含CC_STAT_AREA列,其中将为您提供连接组件的像素区域。

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

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


0
投票

也许只是侵蚀你的形象应该有所帮助。

Morphological Transformations OpenCV

© www.soinside.com 2019 - 2024. All rights reserved.