Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何定制图像差异产生的输出?_Python_Image Processing - Fatal编程技术网

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")