【问题标题】:Find the mean of each boxes in an image in python在python中查找图像中每个框的平均值
【发布时间】:2023-04-03 05:12:01
【问题描述】:

我的这张图片有 9 个小盒子(黑色和白色盒子),每个盒子的宽度 = x 和高度 =y。我需要每个小盒子的像素值的平均值。

最初我将图像转换为数组

image = cv2.imread('x.png')
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

这是我尝试过的,但有错误。

box_pixels = []
temp = []
p, q, r, s = 0, x, 0, y
while q <= gray.shape[0]:
    temp.append([])
    while s <= gray.shape[1]:
        for i in range(p, q):
            for j in range(r, s):
                temp.append(gray[i][j])
        r = s
        s = s+y
    p = q
    q = q + x
    box_pixels.append(temp)

print(box_pixels)

我不知道该怎么办?

【问题讨论】:

  • 这听起来像是内核问题。你最终想要做什么?模糊图像?
  • 不,不是关于模糊,如果我得到一个盒子的意思,我可以将它视为那个盒子的像素(就像是黑盒子或白盒子)
  • 所以,如果我理解正确,您基本上只是想使用平均值来调整图像大小?为什么不将cv2.resize 与您选择的插值器一起使用?
  • 绝对有可能用两个嵌套循环来做你想做的事情。但是,这种效率不会令人惊讶,因为它需要大量的模组。不过,执行 4 次嵌套循环不一定是低效的。如果您在外部两个循环 (y, x) 中遍历每个框,然后在内部两个循环中遍历这些框,那么您只访问每个像素一次,这仍然是有效的。
  • 是的,先生!我刚刚阅读了一些文档,你想要的插值器是INTER_AREA,它完全符合你目前正在做的事情,除了它处理更多的情况。我将在答案中写一些代码作为示例。

标签:
python
python-3.x
opencv
image-processing
computer-vision