Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用python查找图像中每个框的平均值_Python_Python 3.x_Opencv_Image Processing_Computer Vision - Fatal编程技术网

用python查找图像中每个框的平均值

用python查找图像中每个框的平均值,python,python-3.x,opencv,image-processing,computer-vision,Python,Python 3.x,Opencv,Image Processing,Computer Vision,我有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([

我有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)
box_像素=[]
温度=[]
p、 q,r,s=0,x,0,y

而你真正想做的就是缩小图像的比例。假设我们的图像是256x256像素,我们想把它缩小到32x32像素。这意味着我们将使用原版的1/8大小(32/256)。这也意味着每个框将是8x8像素。因此,要执行调整大小:

image = cv2.imread('x.png')
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
resized = cv2.resize(gray, None, fx=32/256, fy=32/256, interpolation=cv2.INTER_AREA)

这将使您了解如何使用宽度/高度坐标来计算正确的调整大小值。

这听起来像是一个核心问题。你最终想做什么?模糊图像?不,不是关于模糊,如果我得到一个盒子的意思,我可以把它看成那个盒子的像素(像是黑盒子或者白盒子),所以,如果我理解正确,你基本上只是想用平均值来调整图像的大小。为什么不在选择插值器时使用
cv2.resize
。然而,这种效率并不惊人,因为它需要大量的MOD。不过,执行4x嵌套循环并不一定效率低下。如果你在外两个循环(y,x)中迭代每个框,然后在内两个循环中迭代这些框,那么你只访问每个像素一次,这仍然是有效的。Yessir!我刚刚阅读了一些文档,您需要的插值器是
INTER_AREA
,它与您当前所做的完全相同,只是它处理了一些其他情况。我将在回答中写一些代码作为一个例子。调整大小很好,但如果图像中有错误,如模糊图像或图像与上面的图像不清晰,则没有帮助,因为在这种情况下,相同小框中的像素不同