首页 > 解决方案 > 如何使用 PIL 更改像素的颜色?

问题描述

我试图使用这个问题在 python 中更改图像的像素。如果mode为 0,它将图像右上角的第一个像素变为灰色(#C8C8C8)。但它没有改变。没有足够的关于draw.point(). 这段代码有什么问题?

import random
from PIL import Image, ImageDraw
mode = 0
image = Image.open("dom.jpg") 
draw = ImageDraw.Draw(image)  
width = image.size[0]  
height = image.size[1]      
pix = image.load()
string = "kod"
n = 0
if (mode == 0):
    draw.point((0, 0), (200, 200, 200))
if(mode == 1):
    print(pix[0,0][0])
image.save("dom.jpg", "JPEG")
del draw

标签: pythonimagecolorspython-imaging-librarypixel

解决方案


在你的情况下使用PIL必须吗?如果没有,请考虑使用 OpenCV ( cv2) 来更改图像的特定像素。将(0,0)像素更改为(200,200,200)的代码在opencv中看起来如下:

import cv2
img = cv2.imread('yourimage.jpg')
height = img.shape[0]
width = img.shape[1]
img[0][0] = [200,200,200]
cv2.imwrite('newimage.bmp',img)

请注意,此代码以.bmp格式保存图像 - cv2 也可以写入.jpg图像,但由于 jpg 通常是有损格式,因此可能会丢失一些小细节。请记住,incv2 [0][0]是左上角,第一个值是像素的 y 坐标,而第二个是 x 坐标,另外 color 是按顺序从0to 255(包括)的三个值,BGR而不是RGB.

有关 OpenCV 教程,包括安装,请参阅.


推荐阅读