python - 如何获取所有白色斑点的像素位置
问题描述
我正在从二进制图像创建注释。我想要二进制图像中每个白色 blob 列表的单独列表。因此,按照我在下面给出的图像,我应该得到六个数组/列表。
我在 Numpy + OpenCV-Python 之后使用了 np.argwhere(img == 255) :获取白色像素的坐标,但它返回了所有白色斑点的组合像素位置。
我已经使用了这个 cv2.findContours(threshed, cv2.RETR_LIST,cv2.CHAIN_APPROX_SIMPLE)[-2] 但这会返回外边缘的像素值而不是整个 blob。如何从图像中获取单独的列表?
解决方案
您可以使用connectedComponents
:
r,l = cv2.connectedComponents(img)
blobs = [np.argwhere(l==i) for i in range(1,r)]
(标签0
是背景,这就是我们从 in 开始的1
原因range(1,r)
)
例子:
import cv2
from urllib.request import urlopen
import numpy as np
req = urlopen('https://i.stack.imgur.com/RcQut.jpg')
arr = np.asarray(bytearray(req.read()), dtype=np.uint8)
img = cv2.imdecode(arr, cv2.IMREAD_GRAYSCALE)
img = cv2.threshold(img, 127, 255, cv2.THRESH_BINARY)[1]
r,l = cv2.connectedComponents(img)
print([len(np.argwhere(l==i)) for i in range(1,r)]) #just the lenghts for shortness
#[317, 317, 377, 797, 709, 613]
推荐阅读
- python - 如何安排kivy相机连续读取纹理?
- database - 当我使用 AWS 基础设施时,将 pdf 文件存储在云上的经济高效的解决方案是什么?
- c++ - 使用 C++,将 int 转换为 char 总是有 3 位数的问题
- python - NGINX 服务器块无法按预期工作
- amazon-web-services - AWS AppSync 和 GraphQL 中的搜索修饰符
- r - 对大型稀疏矩阵的每一行中的每 k 列求和的有效方法
- jquery - 使用 Bootstrap 停用导航选项卡
- database-design - SQL 图表设计问题 - 我如何在数据库中管理每个成员的日程安排?
- java - hibernate - 为什么我需要在保存实体之前将孩子放入父集合中
- c - Call-by-name 和 Call-by-macro-expansion 之间的区别