Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/320.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中的GUI编程/数组_Python - Fatal编程技术网

Python中的GUI编程/数组

Python中的GUI编程/数组,python,Python,我需要对GUI编程中的数组进行更多的阐述。对于图像处理,我得到了以下代码作为图像处理的示例: def grayscale(im): height=len(im) width = len(im[0]) for row in range(height): for col in range(width): average = sum(im[row][col])/3 im[row][col]=[average,ave

我需要对GUI编程中的数组进行更多的阐述。对于图像处理,我得到了以下代码作为图像处理的示例:

def grayscale(im):
    height=len(im)
    width = len(im[0])
    for row in range(height):
        for col in range(width):
            average = sum(im[row][col])/3
            im[row][col]=[average,average,average]
    return im

代码返回前的最后一行——它是什么意思?代码应该逐像素运行,并对RGB值取平均值,以获得灰度值——每个像素的总和/3是平均值吗?代码如何知道红色、蓝色和绿色值是什么?

像素中的每种颜色都由三个分量的变化定义:红色、绿色和蓝色,通常在0到255之间振荡,产生1600万种颜色(
255^3

灰色阴影由红色、绿色和蓝色的三个相同值表示

有几种方法可以实现灰度转换,包括快速n’脏平均法(参见其他方法)


由于灰度只需要一个刻度(从白色到黑色),您可以使用公式
(R+G+B)/3对三个分量求平均值,为每个颜色分量生成一个具有该值的新颜色,从而创建一个灰色阴影。

对于这个答案,我将假设
im
是一个包含
[R,G,B]的3D列表
图像中每个像素的值,或者换句话说,其形式如下:

im = [ [[a, b, c], [d, e, f]],
       [[g, h, i], [j, k, l]] ]
让我们逐一处理您的问题:

首先,你问每一个像素的总和,除以三,是平均值。为了回答这个问题,让我们看看数字列表的平均值(更准确地说,是算术平均值)的定义,它是“列表中的数字之和除以列表中的元素数。”
在数学符号中,它看起来是这样的,
a
是列表的名称,
n
是列表的长度:

因此,3个项目的平均列表长度为:

现在,在本例中,我们将每个像素的值存储为一个列表,其中包含
[R,G,B]
形式的数据。根据我们刚才描述的公式,三个值的平均值等于它们的总和除以它们的长度。如果我们应用该公式,我们得到:

现在来看第二个问题,代码如何知道红色、绿色和蓝色值是什么。答案是它知道这些值,因为我们告诉它去哪里看。开始时,我们将
im
定义为一个3D列表,包含每个像素的
[R,G,B]
值。编写代码的人认为表示数据的最佳方式是通过这样的列表,因此他们以依赖于该表示的方式编写了所有其他代码。现在,根据您提供的代码,我们实际上无法保证值是
[R,G,B]
。它们可以是
[G,R,B]
,或者
[B,G,R]
。然而,处理颜色时的标准做法是将它们排序为
[R,G,B]
,除非你看到一个具体的理由不这样想,否则这应该是你的假设。此外,对于这个特定的代码,值的顺序无关紧要,因为
[10,20,30]
的平均值与
[20,30,10]
或这些值的任何其他重新排列的平均值相同

最后,让我们谈谈如何找到
[R,G,B]
值的平均值将图像转换为灰度。中性色定义为R、G和B都相等的任何颜色。白色是中性色(R=G=B=100%),黑色也是中性色(R=G=B=0%)。这同样适用于介于白色和黑色之间的所有色调。换句话说,R=G=B的任何颜色都将是白色、黑色或灰色

因此,要转换为灰度,我们只需要将给定的像素映射到相应的像素,其中R=G=B。使R、G和B相等的最简单方法之一是设置:

这正是这里的代码所做的