所以我设计了编辑照片的几个方案中python使用PIL,其中之一是将图像转换为灰度图像(我避免因使用任何功能PIL).
我已经采用的算法是简单的:对于每个像素(色彩深度为24),我已经计算出的平均R,G和B值,并设置RGB值到该平均.
我的程序生成的灰度图像似乎很准确,但我想知道我是否使用了正确的算法,并且我遇到了一个问题的答案,似乎"正确"的算法是计算的0.299 R + 0.587 G + 0.114 B.
我决定将我的程序与这个算法进行比较.我使用我的程序生成了一个灰度图像,另一个(使用相同的输入)来自一个网站(谷歌的最高结果)'image to grayscale'.
在我的肉眼看来,它们似乎完全相同,如果有任何变化,我看不到它.但是,我决定使用这个网站(谷歌的最佳结果'compare two images online')来比较我的灰度图像.事实证明,在像素的深处,它们有轻微的变化,但没有一个人乍一看是可感知的(差异可以被发现,但通常只有当图像相互叠加或在几毫秒之间切换时) .
我的问题(第一个是主要问题):
我的关键代码(如果需要):
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%的模糊):

尽管上面突出显示了像素的变化,但上面的灰度图像看起来几乎完全相同(至少对我而言).
另外,关于我的第一个问题,如果有人感兴趣, …
python algorithm image-comparison image-conversion python-imaging-library
我有两个列表,第一个列表与第二个列表相比有额外的数据(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数据映射到正确的列.
我有一个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(3)中乱搞,我正在尝试定义一些函数来在单行中执行一些常见任务,尽可能减少内存使用
例如,在视频游戏中,您可能希望角色向左/向右转动一些角度,但不是0度.那么,给定一个整数x,你怎么能在-x+ x'(包括)之间返回一个不是0 的随机整数?
注意,我要使用最小内存的单行.
我正在发布答案,但我也想知道其他人会如何处理这个问题.
编辑:这不是学校的家庭作业或任何东西,我只是设计一个视频游戏,并定义一些将派上用场的功能.我说没有'如果是因为我想知道是否可能,如果是,那怎么样.
谢谢 :-)
给定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循环,但我正在寻找可以处理不同大小的列表的最有效方式(可能使用生成器).
如标题所示,我不知道“.”是什么。在os.listdir(".")手段。
是指当前目录下的所有文件和文件夹吗?
python ×6
python-3.x ×4
algorithm ×1
list ×1
optimization ×1
pandas ×1
performance ×1
python-2.7 ×1