Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/364.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/image/5.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 通过使用PIL比较两幅图像/图片,有些不';行不通_Python_Image_Python Imaging Library - Fatal编程技术网

Python 通过使用PIL比较两幅图像/图片,有些不';行不通

Python 通过使用PIL比较两幅图像/图片,有些不';行不通,python,image,python-imaging-library,Python,Image,Python Imaging Library,我正在使用PIL比较两幅图像/图片。下面的代码适用于某些图片,但不是全部 from PIL import Image from PIL import ImageChops from PIL import ImageDraw im1 = Image.open(r'c:\a.jpg') im2 = Image.open(r'c:\aa.jpg') diff = ImageChops.difference(im2, im1).getbbox() print diff draw = ImageD

我正在使用PIL比较两幅图像/图片。下面的代码适用于某些图片,但不是全部

from PIL import Image
from PIL import ImageChops
from PIL import ImageDraw

im1 = Image.open(r'c:\a.jpg')
im2 = Image.open(r'c:\aa.jpg')

diff = ImageChops.difference(im2, im1).getbbox()

print diff

draw = ImageDraw.Draw(im2)
draw.rectangle(diff)
im2 = im2.convert('RGB')
im2.save(r'c:\aaa.jpg')
例如,它不适用于这两张图片

a、 jpg

aa.jpg

输出为(16,80,80,144),但它不会在图片上绘制任何内容

问题:

  • 为什么会这样
  • 文件类型重要吗?i、 e.JPG与JPG比较;PNG与PNG比较;BMP与BMP比较–哪种格式最适合比较
  • 有时差异在于图片上的距离很远,所以它会画一个大矩形来包含整个区域。有没有办法只画一个小矩形来标记不同的区域
  • 谢谢

    from PIL import Image
    from PIL import ImageChops
    from PIL import ImageDraw
    
    im1 = Image.open('a.jpg')
    im2 = Image.open('aa.jpg')
    
    diff = ImageChops.difference(im2, im1).getbbox()
    
    print diff
    
    draw = ImageDraw.Draw(im2)
    draw.rectangle(diff, outline = (0,255,0))
    print  help(draw.rectangle)
    im2 = im2.convert('RGB')
    im2.save('aaa.jpg')
    
    模块PIL.ImageDraw中方法矩形的帮助:

    矩形(自身,xy,填充=无,轮廓=无)的方法 PIL.ImageDraw.ImageDraw实例

    因此,outline参数默认为None,这就是为什么它在这里创建透明矩形


    矩形调用是否需要颜色?在openCV软件包中,您可以根据亮度差异获取不同的变化区域。对于初级读物:你确定它没有画出任何东西,可以通过改变矩形的颜色来检查,
    draw.rectangle(diff,outline=(0255,0))
    谢谢,用户1269942。我将阅读教程。@Marcin,谢谢你的提示。有人知道PNG、JPG、BMP等文件格式是否重要吗?谢谢。它解决了这个问题。事实上,它们是完全相同的,但被认为是不同的,有没有一种不那么“敏感”的方式来比较图片?我的意思是,只有完全不同的图片才能被认为是不同的。如果你要进行图像比较或搜索图像上的任何对象等,我真的建议你使用opencv。