【问题标题】:np.sum Not returning total countsnp.sum 不返回总计数
【发布时间】:2018-05-11 04:10:13
【问题描述】:

我正在尝试此代码,但它不返回零[x][y] 的总计数,在这种情况下它应该返回 5 但它全部显示 255 五次。
此代码用于连接组件,零是白色像素的一个组件

预期输出应该是:5
但我得到的是:
255
255
255
255
255

for (x, y) in labels:
        component = uf.find(labels[(x, y)])
        # Update the labels with correct information
        labels[(x, y)] = component
        path='imagesNew/13/'
        if labels[(x, y)]==0:
            Zero[y][x]=int(255)
            Z=Zero[y][x]
            print Z
            if Z==5:
              print Zero[y][x]
              Zeroth = Image.fromarray(Zero)
              Zeroth.save(path+'Zero'+'.png','png')

【问题讨论】:

  • 请添加您预期的输入和输出。目前,这个问题还不清楚
  • 请包含周围的代码,以便我们了解正在发生的事情的更多上下文。
  • 你把它设置为255,然后立即检查它是否是5...永远不会这样?
  • 您应该对整个图像求和以计数。例如。将像素更改为 255 后,在 for 循环之外,您只需要 np.sum(Zero)/255。或者您可以创建一个计数器 zero_counter 并在每次标签像素为 0 时递增。
  • 如果 8 个组件的条件每个条件都会创建图像,我总共有 8 个图像上面的代码正在为一个组件创建一个图像,所以我想如果在一个图像中找到 5 个像素,现在丢弃我如何编辑上面的代码

标签: python numpy opencv image-processing python-imaging-library


【解决方案1】:

我相信这就是您所追求的。此代码将遍历标记图像中的每个标签,创建一个布尔掩码,显示每个标签在图像中的位置,并将该掩码求和以告诉您每个标签的总数。

import numpy as np
labeled_img = np.array([
    [1, 1, 0, 0, 2],
    [1, 0, 0, 2, 2],
    [1, 0, 2, 2, 2],
    [1, 1, 1, 2, 2],
    [1, 1, 1, 2, 2]])

for label in np.unique(labeled_img):
    print('Quantity of', label, 'labels:', np.sum(labeled_img == label))

0 个标签的数量:5
1 个标签的数量:10
2 个标签的数量:10

请注意,如果您使用 OpenCV 查找连接的组件,connectedComponents() 的第一个返回值是标签的数量,因此您可以简单地循环遍历 for label in range(n_labels) 而不是 np.unique(),这样会快一点.

【讨论】:

  • @pixelthread 不,我不会为您编写项目代码。但是,通过掩盖它,我发现您要做的只是为每个组件创建一个蒙版,并用颜色显示组件。只需几行代码就可以做到这一点,因此我将对其进行编辑以显示这一点。给我一点……
  • 不,它不遮罩它的数组颜色部分与此无关
  • 无论哪种方式,@pixelthread 您在这里遇到的原始问题是如何获取组件的计数,上面的代码应该可以很好地完成这项任务。如果您有其他问题,您应该提出一个新问题。
  • 我可以打开,但你明白我在做什么
  • 我正在尝试计算图像中的总像素数,但上面的代码不返回总计数
猜你喜欢
  • 1970-01-01
  • 2023-03-08
  • 2018-02-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多