繁体   English   中英

Python中的GUI编程/数组

[英]GUI programming/arrays in 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,average,average]
    return im

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

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

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

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

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

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

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] [10, 20, 30]的平均值或这些值的任何其他重新排列相同。

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

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

这就是这里的代码所做的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM