【问题标题】:Python (pygame): Get image color information?Python(pygame):获取图像颜色信息?
【发布时间】:2013-05-28 04:19:50
【问题描述】:

我的最终目标是在图像中找到一种颜色(在本例中为白色)并将其替换为另一种颜色(根据某些情况)。因此,随着某个变量的变化,白色被替换为特定的颜色。

但是,要到达那里,我目前只是在玩图像(使用教程 ..etc)。我正在尝试使用下面的代码来打印图像的调色板。我的理解是颜色是代表 RGB 的 3 个整数的“元组”。 0 = 最暗,255 = 白色。所以,我正在测试的图像是黑白图像。我期待像“(0,0,0),(255,255,255)”这样的东西。所以,我想如果我能做到这一点,那么我可以编写一个代码来用适当的颜色替换“(255,255,255)”。

我提到最终目标是因为我非常清楚我的方法可能不是最好的,也许有人有更好的方法可以解决这个问题。如果没有,我至少希望能够打印一个引用图像包含的颜色的字符串。 “NOFRAME”是我在这个网站上找到的一个很好的建议,因为我实际上并没有“使用”图像/图形 - 只是使用它们的属性。

image1=r"C:\Python27\Lib\site-packages\pygame\examples\data\image1.jpg"
image2=r"C:\Python27\Lib\site-packages\pygame\examples\data\image2.png"

import pygame, sys
from pygame.locals import *

pygame.init()

pygame.display.set_mode((1,1), pygame.NOFRAME)

background = pygame.image.load(image1).convert()
mouse_c=pygame.image.load(image2).convert_alpha()

colorpal = pygame.Surface.get_palette(mouse_c)

print colorpal

【问题讨论】:

  • 如果您只说错了什么或问了一个具体问题,这将是一个很好的解释。 “请测试我的程序并让它工作”不是一个好问题。
  • @stark:我不同意-那里有一个问题-这个问题超出了信息范围,但它显示了OP到目前为止正在尝试什么-至于这里的良好做法。很抱歉,我现在不得不离开,无法给出完整的答案。
  • 对不起,如果我不清楚。我不想问一个问题,也不想提供足够的信息——因为我经常看到这种情况。我的方法很简单:1.这是我的问题,2.这是我试图解决它的一种方法(它有自己的问题)。 3. 有人可以帮忙解决这两个问题吗?

标签: python colors pygame palette color-palette


【解决方案1】:

您可以使用 Pygame 表面的get_at方法获取图像表面上的单个像素 - 如mouse_c.get_at((0,0))

这正是您所要求的——但它不适合任何现实世界的需求,因为它非常,我是说处理图像的所有像素调用它的速度非常慢。

您可以使用get_buffer 获取图像缓冲区并在那里解释原始数据,或者将缓冲区传递给用本机代码编写的函数以获得一些速度。

不过,如果您的目标是实时将一种颜色替换为另一种颜色,您可以使用索引图像 - 这样,每个图像都会有一个颜色表,您只需将颜色编号 10 修改为是0,0,255,当你渲染图像时,所有出现的那种颜色都会变成蓝色。这速度很快——不像以前由硬件完成的 8 位视频游戏时代那样高效——但你尝试在纯 Python 代码中进行的任何替换都会快几个数量级。

【讨论】:

  • 感谢 jsbueno!是的,逐个像素现在很有趣(而且可能很慢)。但是,我会记住这一点,以备将来之需。我认为 pixelarray.replace 可能更适合这个。
【解决方案2】:

您想要做的将需要大量像素级别的工作,因此我建议您使用pygame.PixelArray 对象直接访问表面的像素。

对于您特别想做的事情,听起来您可以使用pygame.PixelArray.replace() 方法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-04-11
    • 1970-01-01
    • 2010-12-17
    • 1970-01-01
    • 2016-02-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多