- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在使用 PIL 使图像的颜色四舍五入为最接近的颜色。然而,当我这样做时,我使用函数 putpixel 遇到了许多错误。我尝试将 RGB 值转换为 int
,以防它们是 float
。我尝试只使用 RGB 的 int
形式,但到目前为止似乎没有任何效果。
以下是我的尝试:
import numpy as np
from PIL import Image
im = Image.open("milford_sound_new_zealand_bay_reflection_mountains_104080_1920x1080.jpg");
out = Image.new('I', im.size, 0xffffff);
col_amt = 10;
cold = []
def nearest(arr, val):
arr = np.asarray(arr)
idx = (np.abs(arr - val)).argmin()
return arr[idx]
def rgbint(r,g,b):
rgb = r;
rgb = (rgb << 8) + g
rgb = (rgb << 8) + b
return rgb
def intrgb(rgb):
return(rgb // 256 // 256 % 256, rgb // 256 % 256, rgb % 256)
for i in range(col_amt):
rgb = ((256*256*256)-1)/(col_amt-1) * i;
#print(rgb);
cold.append(rgb)
cold = np.array(cold)
width, height = im.size
for x in range(width):
for y in range(height):
r,g,b = im.getpixel((x,y))
d = rgbint(r,g,b)
cd = nearest(cold, d)
rgb = intrgb(cd)
#if b < g and b < r or r==g==b:
#print(rgb)
out.putpixel((x,y),(int(rgb[0]), int(rgb[1]), int(rgb[2])))
out.save('bar.png')
最佳答案
您放置了R,G,B
,因此您必须在
'RGB'
而不是
'I'
out = Image.new('RGB', im.size, 0xffffff)
对于I
,你必须输入int(cd)
out.putpixel((x, y), int(cd))
因为它需要 32 位值而不是 3x8 位值
文档:Modes
关于python - PIL putpixels函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57829738/
我的目标是为每个像素生成一种颜色以填充整个 Canvas ,但是生成的图像总是变成黑色,只有一个像素改变了颜色,我似乎无法弄清楚我做错了什么。 import random from PIL impor
我想使用 Bresenham 算法画线,但有问题。我不知道,我应该在代码中使用什么来代替 putPixel() 方法: public void Line(int x0, int y0, int x1,
我是 ImageJ 初学者,我尝试使用 putPixel 但没有取得太大成功。 ImagePlus ip = IJ.getImage(); HistogramWindow histo = ne
我要消除图像的“噪声”,主要是使用排序的椒盐噪声,然后将平均值分配给坐标。结果应该是基于之前的颜色,但是我得到的变成了RED.. 这个参数有问题吗?非常感谢! from PIL import Imag
所以我在做这个学校项目(我知道真正的基本编程,而 python 是我唯一知道的语言),我需要更改我的像素颜色以对图片中的消息进行编码,但 PIL 的 putpixel 似乎没有要工作,这是我的代码。
我在 w = 134 和 h = 454 的图像 (srcImage) 上使用 putpixel。 此处的代码获取字体的一部分 r、g、b 值,即 0,255,0(这是我通过调试使用打印选项找到的)。
我正在使用代码打印像素。 // C code #include #include int main() { int gd = DETECT, gm; initgraph(&gd,
我有兴趣将一些旧的分形成像程序从 Borland C 移植到 python。在 Borland C 中,putpixel 命令会将指定的颜色像素放置在光栅化图形字段中。在 matplotlib 中是否
我想在asm中画一条彩色线。我必须在 x86 intel linux 单元上使用 AT&T 语法。我已经了解了很多,但我想知道如何进入 VGA 模式或 X 模式,以及如何在屏幕上放置像素。标准 C 库
关闭。这个问题需要更多focused .它目前不接受答案。 想改进这个问题吗? 更新问题,使其只关注一个问题 editing this post . 关闭 7 年前。 Improve this qu
我是一名优秀的程序员,十分优秀!