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

我的最终目标是在图像中找到一种颜色(在这种情况下为白色),然后将其替换为另一种颜色(根据特定情况)。因此,随着特定变量的变化,白色将替换为特定的颜色。


但是,要到达那里,我目前只是在玩图像(使用教程..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


慕莱坞森
浏览 712回答 2
2回答

慕田峪4524236

您想要做的是需要大量像素级的工作,因此,我建议您使用一个pygame.PixelArray对象直接对表面进行像素访问。对于您特别想做的事情,听起来可以使用该pygame.PixelArray.replace()方法。

慕盖茨4494581

您可以使用get_atPygame曲面的方法获得图像曲面上的单个像素-如中所述mouse_c.get_at((0,0))。严格来说,这是您所要的-但它无法满足任何现实世界的需求,这是非常极端的,我要说的是,处理这样的图像的所有像素非常慢。您可以使用图像缓冲区get_buffer并在那里解释数据,原始数据,或者将缓冲区传递给用本机代码编写的函数以提高速度。不过,如果您的目标是实时用另一种颜色替换颜色,则可以诉诸使用索引图像-这样,每个图像都会有一个颜色表,您只需将颜色编号修改10为0,0,255,并在渲染时图像,该颜色的所有出现都变为蓝色。这是快速的-效率不及硬件完成的8位视频游戏时代-但这将使您尝试在纯Python代码中进行的任何替换都快几个数量级。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python