Python 如何定制图像差异产生的输出?
我没有图像处理方面的背景。我很想知道这两幅图像之间的区别 在编写以下代码之后:Python 如何定制图像差异产生的输出?,python,image-processing,Python,Image Processing,我没有图像处理方面的背景。我很想知道这两幅图像之间的区别 在编写以下代码之后: from PIL import Image from PIL import ImageChops im1 = Image.open("1.png") im2 = Image.open("2.png") diff = ImageChops.difference(im2, im1) diff.save("diff.png") 我得到这个输出:- 我在这里寻找一些定制: 1) 我想用不同的颜色标注输出的差异。来自
from PIL import Image
from PIL import ImageChops
im1 = Image.open("1.png")
im2 = Image.open("2.png")
diff = ImageChops.difference(im2, im1)
diff.save("diff.png")
我得到这个输出:-
我在这里寻找一些定制:
1) 我想用不同的颜色标注输出的差异。来自1.png和2.png的东西应该有不同的颜色
2) 背景应该是白色的
3) 我希望输出具有轴和轴标签。有可能吗?使用高级差分法可能无法做到这一点,但如果您自己逐像素比较图像,这很容易。快速尝试: 代码:
从PIL导入图像
从PIL导入ImageDraw
从PIL导入ImageFont
im1=Image.open(“im1.jpeg”).convert('1')#用于像素评估的二进制图像
rgb1=Image.open(“im1.jpeg”).convert('RGB')#用于边框复制的RGB图像
p1=im1.load()
prgb1=rgb1.load()
im2=Image.open(“im2.jpeg”).convert('1')#用于像素评估的二进制图像
p2=im2.load()
宽度=im1。尺寸[0]
高度=im1。尺寸[1]
imd=图像。新建(“RGB”,im1。大小)
draw=ImageDraw.draw(imd)
dest=imd.load()
fnt=ImageFont.truetype('/System/Library/Fonts/OpenSans Regular.ttf',20)
对于范围内的i(0,宽度):
对于范围(0,高度)内的j:
#边界区域:仅从RGB图像1复制像素
如果j<30或j>538或i<170或i>650:
dest[i,j]=prgb1[i,j]
#像素仅在im1中设置,变为红色
elif p1[i,j]==255和p2[i,j]==0:
dest[i,j]=(255,0,0)
#像素仅在im2中设置,设为蓝色
elif p1[i,j]==0和p2[i,j]==255:
dest[i,j]=(0,0255)
#不变像素/背景:变为白色
其他:
dest[i,j]=(255255)
draw.text((700,50),“蓝色”,“蓝色”,font=fnt)
draw.text((700,20),“红色”,“红色”,font=fnt)
imd.show()
imd.save(“diff.png”)
这假设图像大小相同,轴相同。好的,我正在编辑这个问题。非常感谢。很抱歉,回复极其延迟。太完美了。只需要图例和底部边框。我将自己尝试。我无法找到不同颜色的图例选项。你能帮我一下吗?我能够正确调整限制。您可以使用ImageDraw text()方法添加文本,示例如下:太好了!!知道了
from PIL import Image
from PIL import ImageDraw
from PIL import ImageFont
im1 = Image.open("im1.jpeg").convert('1') # binary image for pixel evaluation
rgb1 = Image.open("im1.jpeg").convert('RGB') # RGB image for border copy
p1 = im1.load()
prgb1 = rgb1.load()
im2 = Image.open("im2.jpeg").convert('1') # binary image for pixel evaluation
p2 = im2.load()
width = im1.size[0]
height = im1.size[1]
imd = Image.new("RGB", im1.size)
draw = ImageDraw.Draw(imd)
dest = imd.load()
fnt = ImageFont.truetype('/System/Library/Fonts/OpenSans-Regular.ttf', 20)
for i in range(0, width):
for j in range(0, height):
# border region: just copy pixels from RGB image 1
if j < 30 or j > 538 or i < 170 or i > 650:
dest[i,j] = prgb1[i,j]
# pixel is only set in im1, make red
elif p1[i,j] == 255 and p2[i,j] == 0:
dest[i,j] = (255,0,0)
# pixel is only set in im2, make blue
elif p1[i,j] == 0 and p2[i,j] == 255:
dest[i,j] = (0,0,255)
# unchanged pixel/background: make white
else:
dest[i,j] = (255,255,255)
draw.text((700, 50),"blue", "blue", font=fnt)
draw.text((700, 20),"red", "red", font=fnt)
imd.show()
imd.save("diff.png")