我想比较两个基本上读取两个.png文件的图像文件(.png),并断言内容是否相等。
我在下面尝试过
def read_file_contents(file1, file2):
with open(file1, 'r', errors='ignore') as f:
contents1 = f.readlines()
f.close()
with open(file1, 'r', errors='ignore') as f:
contents2 = f.readlines()
f.close()
return {contents1, contents2}
然后断言我使用的两个内容是否相等
assert contents1 == contents2
但这给了我断言错误。有人可以帮我吗谢谢。
答案 0 :(得分:1)
有多种方法可以使用各种Python库来完成此任务,包括numpy和math,imagehash和pillow。
这是一种方法(我将其修改为仅比较2张图像)。
# This module is used to load images
from PIL import Image
# This module contains a number of arithmetical image operations
from PIL import ImageChops
def image_pixel_differences(base_image, compare_image):
"""
Calculates the bounding box of the non-zero regions in the image.
:param base_image: target image to find
:param compare_image: set of images containing the target image
:return: The bounding box is returned as a 4-tuple defining the
left, upper, right, and lower pixel coordinate. If the image
is completely empty, this method returns None.
"""
# Returns the absolute value of the pixel-by-pixel
# difference between two images.
diff = ImageChops.difference(base_image, compare_image)
if diff.getbbox():
return False
else:
return True
base_image = Image.open('image01.jpeg')
compare_image = Image.open('image02.jpeg')
results = image_pixel_differences (base_image, compare_image)
我还有其他示例,因此如果此示例不适合您,请告诉我。
答案 1 :(得分:0)
我不认为在这里使用硒作为标签是正确的选择,但有可能。
图像可以并且被表示为一堆像素(基本上是数字),其排列方式使它们成为真实的样子。 想法是将这些数字与它们在两张图片中的排列方式一并计算它们之间的距离,有多种方法可以实现,例如MSE。 有关其自身的代码和进一步的说明,请查看下面的链接。
https://www.pyimagesearch.com/2014/09/15/python-compare-two-images/
祝您好运! (:
答案 2 :(得分:0)
如果您只想精确匹配,则可以直接比较字节:
def validate_file_contents(file1, file2):
with open(file1, 'rb', errors='ignore') as f1, open(file2, 'rb', errors='ignore') as f2:
contents1 = f1.read()
contents2 = f2.read()
return contents1 == contents2
如果需要,您可以使用assert
,但我个人将检查True
/ False
条件。
您的代码中也有一些错误:
with
块中的内容未缩进。with
块中,您不需要close()
文件。set
和content1
中的content2
,如果它们实际上相等,则只返回1个项目。您可能想return (content1, content2)
作为元组。