Python(pygame):获取图像颜色信息?

时间:2013-06-01 12:17:13

标签: python colors pygame palette color-palette

我的最终目标是在图像中找到一种颜色(在这种情况下为白色)并将其替换为另一种颜色(基于某些情况)。因此,当某个变量发生变化时,白色会被特定的颜色所取代。

然而,到目前为止我正在玩图像(使用教程..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

2 个答案:

答案 0 :(得分:3)

您想要做的是需要大量的像素级工作,所以我建议您使用pygame.PixelArray对象来直接像素访问曲面。

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

答案 1 :(得分:2)

您可以使用Pygame曲面的get_at方法获取图像曲面上的单个像素 - 与mouse_c.get_at((0,0))中一样。

这是你要求的严格要求 - 但它不适合任何现实世界的需要,因为它是非常的,而且我说极其缓慢地处理图像的所有像素调用这个。

您可以使用get_buffer获取图像缓冲区并将其解释为raw,或将缓冲区传递给使用本机代码编写的函数以获得一定的速度。

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

相关问题