小编Adi*_*219的帖子

使用粗糙灰度算法的问题?

所以我设计了编辑照片的几个方案中python使用PIL,其中之一是将图像转换为灰度图像(我避免因使用任何功能PIL).

我已经采用的算法是简单的:对于每个像素(色彩深度为24),我已经计算出的平均R,G和B值,并设置RGB值到该平均.

我的程序生成的灰度图像似乎很准确,但我想知道我是否使用了正确的算法,并且我遇到了一个问题的答案,似乎"正确"的算法是计算的0.299 R + 0.587 G + 0.114 B.

我决定将我的程序与这个算法进行比较.我使用我的程序生成了一个灰度图像,另一个(使用相同的输入)来自一个网站(谷歌的最高结果)'image to grayscale'.

在我的肉眼看来,它们似乎完全相同,如果有任何变化,我看不到它.但是,我决定使用这个网站(谷歌的最佳结果'compare two images online')来比较我的灰度图像.事实证明,在像素的深处,它们有轻微的变化,但没有一个人乍一看是可感知的(差异可以被发现,但通常只有当图像相互叠加或在几毫秒之间切换时) .

我的问题(第一个是主要问题):

  1. 使用我的"粗糙"灰度算法有什么缺点吗?
  2. 有没有人有任何输入图像,我的灰度算法会产生一个明显不同的图像与"正确"的图像?
  3. 是否有任何颜色/ RBG组合我的算法不能正常工作?

我的关键代码(如果需要):

def greyScale(pixelTuple):
    return tuple([round(sum(pixelTuple) / 3)] * 3)
Run Code Online (Sandbox Code Playgroud)

'正确'的算法(似乎重量很重):

def greyScale(pixelTuple):
    return tuple([round(0.299 * pixelTuple[0] + 0.587 * pixelTuple[1] + 0.114 * pixelTuple[2])] * 3)
Run Code Online (Sandbox Code Playgroud)

我的输入图片: 我的输入图片

我的算法产生的灰度图像: 我的算法产生的灰度图像

"正确"的灰度图像:

当在线比较灰度图像时(突出显示红色是差异,使用10%的模糊): 当在线比较灰度图像时(突出显示红色是差异,使用10%的模糊)

尽管上面突出显示了像素的变化,但上面的灰度图像看起来几乎完全相同(至少对我而言).

另外,关于我的第一个问题,如果有人感兴趣, …

python algorithm image-comparison image-conversion python-imaging-library

60
推荐指数
6
解决办法
3259
查看次数

如何在Python的列表开头插入元素

我有两个列表,第一个列表与第二个列表相比有额外的数据(102).

第一份清单:

['102 1 1 v-csm CSM vCSM enabled active up D:042 H:20 M:14 S:58 5.4.4.4-68.REL']
Run Code Online (Sandbox Code Playgroud)

第二份清单:

['2  1 v-csm  CSM  vCSM  enabled active up  D:331 H:12 M:20 S:33  5.4.4.4-68.REL']
Run Code Online (Sandbox Code Playgroud)

我想在列表的第一个位置插入一个像"xyz"这样的字符串,以便使用pandas数据映射到正确的列.

python python-2.7 python-3.x pandas

3
推荐指数
1
解决办法
9143
查看次数

替换字符串中最后一次出现的子字符串的方法更快?

我有一个str"S"和"C"的组合.每个至少出现一次.

我想找到最后一次出现的"CS"并将其改为"SC".

我有两种方法(到目前为止):

P = P[::-1].replace("SC", "CS", 1)[::-1]
Run Code Online (Sandbox Code Playgroud)

和

P = P[:P.rfind("CS")] + "SC" + P[P.rfind("CS") + 2:]
Run Code Online (Sandbox Code Playgroud)

哪条线可能更快?另外,有没有更快的方法来实现我正在做的事情?

python optimization performance python-3.x

3
推荐指数
1
解决办法
131
查看次数

如何在不使用"If"的情况下随机选择一个数字?

基本上,我在Python(3)中乱搞,我正在尝试定义一些函数来在单行中执行一些常见任务,尽可能减少内存使用

例如,在视频游戏中,您可能希望角色向左/向右转动一些角度,但不是0度.那么,给定一个整数x,你怎么能在-x+ x'(包括)之间返回一个不是0 的随机整数?

注意,我要使用最小内存的单行.

我正在发布答案,但我也想知道其他人会如何处理这个问题.

编辑:这不是学校的家庭作业或任何东西,我只是设计一个视频游戏,并定义一些将派上用场的功能.我说没有'如果是因为我想知道是否可能,如果是,那怎么样.

谢谢 :-)

python python-3.x

1
推荐指数
1
解决办法
57
查看次数

我怎样才能生成这个?

给定a list,[3, 2, 4]如何,我如何生成以下输出?

[0, 0, 0]
[0, 0, 1]
[0, 0, 2]
[0, 0, 3]
[0, 0, 4]
[0, 1, 0]
[0, 1, 1]
[0, 1, 2]
[0, 1, 3]
[0, 1, 4]
[0, 2, 0]
[0, 2, 1]
[0, 2, 2]
[0, 2, 3]
[0, 2, 4]
[1, 0, 0]
...
[1, 2, 4]
...
[3, 2, 4]
Run Code Online (Sandbox Code Playgroud)

我需要生成每个列表,其中列表的每个元素都是正数,并且不大于相关索引处给出的数字.

我知道这涉及for循环,但我正在寻找可以处理不同大小的列表的最有效方式(可能使用生成器).

python list python-3.x

-1
推荐指数
1
解决办法
61
查看次数

Python:什么是“。” 在 os.listdir(".") 中是什么意思?

如标题所示,我不知道“.”是什么。在os.listdir(".")手段。

是指当前目录下的所有文件和文件夹吗?

python

-3
推荐指数
1
解决办法
3305
查看次数