首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Cv2.连接组件不检测组件

Cv2.连接组件不检测组件
EN

Stack Overflow用户
提问于 2017-04-21 16:17:59
回答 1查看 9K关注 0票数 11

我在Ubuntu,python 2.7。与OpenCV一起工作。

我试图准确地理解函数cv2. cv2.connectedComponents正在做什么。这是一幅图像:

守则:

代码语言:javascript
运行
复制
import cv2
import numpy as np

img = cv2.imread('BN.tif', 0)

img = np.uint8(img)
_, markers = cv2.connectedComponents(img)

据我所知,此函数创建的数组大小与所提供的图像相同。对于检测到的每个组件,为该组件的所有(y,x)位置分配相同的编号。如果背景为'0',则圆圈将全部为'1',下一个正方形为'2',等等。最后一个分量应该全部为'19‘。我是通过获取定义组件的最高数量来读取组件数:

代码语言:javascript
运行
复制
np.amax(markers)

我应该得到19,但我得到了1。

我的问题是:为什么我只得到一个组件?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-04-21 16:26:52

这是因为cv2.connectedComponents()只将白色部分视为组件。因此,您将得到一个组件。

你得倒转你的形象。您可以通过使用cv2.bitwise_not()函数来做到这一点。

代码:

代码语言:javascript
运行
复制
import cv2
import numpy as np

img = cv2.imread('cc.png', 0)
ret, thresh = cv2.threshold(img, 127, 255, 0)

#---- Inverting the image here ----
img = cv2.bitwise_not(thresh)     
_, markers = cv2.connectedComponents(img)
print np.amax(markers)

结果:

代码语言:javascript
运行
复制
19
票数 12
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43547540

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档