当前位置: 首页 > 知识库问答 >
问题:

如何在python中获取图像像素的RGBA颜色值

云啸
2023-03-14

我正在尝试将此java代码转换为python:

BufferedImage image;
FileInputStream fstream1 = new FileInputStream("image.png")
image = ImageIO.read(fstream1);
int max = -40000000; //Java rgb returns negative values

for (int i = 0; i < 128; i++)
{
    for (int j = 0; j < 255; j++)
    {
        color = image.getRGB(j, i); //returns integer
.....

我在python中尝试过这个:

from PIL import Image

image = Image.open("image.png").convert("RGBA")
pixels = image.load()

for i in range(128):
    for j in range(255):
        color = pixels[j, i] #returns (R, G, B, A);

然而问题是我在python中得到不同的值。

为什么java返回负整数值,我如何在python中获得相同的结果?

共有2个答案

芮安顺
2023-03-14

JavagetRGB()值是一个有符号的32位整数,从最高有效字节到最低有效字节的8位中的每一位都具有alpha、R、G和B值。

您可以通过以下方式“复制”相同的值:

def packRGBA(r, g, b, a)
    val = a << 24 | r << 16 | g << 8 | b
    if a & 0x80:
        val -= 0x100000000
    return val

color = packRGBA(*pixels[j, i])
干善
2023-03-14

此函数应将颜色从Python格式转换为Java格式:

def convertPixel(c):
    x = c[0] << 16 | c[1] << 8 | c[2] | c[3] << 24
    if x >= 1<<31:
        x -= 1<<32
    return x

请注意,Python的格式是完全正确的——它直接为您提供准确的R、G、B和A值。Java有奇怪的格式。

由于整数溢出,您在Java中获得负值-例如0xFFFFFFFF(或4294967295),它是纯白色的,环绕为-1。

 类似资料:
  • 问题内容: 有什么方法可以检查PNG图像的选定点(x,y)是否透明? 问题答案: 基于Jeff的答案,您的第一步将是创建PNG的画布表示。以下内容将创建一个屏幕外画布,该画布的宽度和高度与您的图像相同,并在其上绘制图像。 之后,当用户单击时,使用和获取位置。然后可以用来获取像素: 因为您只抓取一个像素,所以pixelData是一个包含四个像素的R,G,B和A值的四项数组。对于Alpha,任何小于2

  • 问题内容: 我正在尝试使用Swift来获取UIImage中像素的颜色,但它似乎总是返回0。这是从@Minas 对此线程的回答中转换的代码: 提前致谢! 问题答案: 由于遇到了类似的问题,一些搜索将我引到了这里。您的代码工作正常。该问题可能是由您的图像引起的。 码: 发生的是此方法将从图像的CGImage中选择像素颜色。因此,请确保您选择的是正确的图像。例如,如果您的UIImage是200x200,

  • 嘿,我正在尝试做一个程序,它加载一个彩色图像作为灰度画布,然后返回颜色点击像素。当setrgb()方法没有做它应该做的事情时,我就被困在这里了。我已经通过getRGB()从原始图像中复制了颜色,并使用setRGB()将其分配给新图像。我试图输出两个像素颜色值,但他们不一样。请帮我解决这个问题。以下是到目前为止的代码:

  • 问题内容: 我正在尝试为组件的选定像素获取Swing JFrame的颜色。 例如,我想知道的给定的颜色在他们的点。 原因是我的组件是一个部分透明的覆盖层,在下面。对于不透明的像素,鼠标事件应由叠加层处理。对于透明像素,应将鼠标事件转发到下方。 这是这样做的方法吗? 问题答案: 我想说(希望这样做会带来更好的性能),也许,如果您愿意采用这种方法,则最好创建一个尺寸为1x1像素的图像,然后转换其创建的

  • 我对Android很陌生,正在做我自己的迷你项目,我想改变一个特定像素的颜色。在寻找如何做到这一点时,我在几年前遇到了这个问题。我尝试了myBitmap。setPixel(10,10,Color.rgb(45,127,0)) ,但当我在手机上激活它时,我激活这行代码的那一刻它就崩溃了。每当我与位图交互时,它似乎就会崩溃<代码>int x=myBitmap。getHeight() 这一行也会使应用程