Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/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中两个不同文件中的两个imagefile_Python_Image_Comparison - Fatal编程技术网

如何比较python中两个不同文件中的两个imagefile

如何比较python中两个不同文件中的两个imagefile,python,image,comparison,Python,Image,Comparison,我想创建一个程序,比较两个图像。我需要从两个不同的文件夹中拍摄图像,并比较它们是否相同。然后我想打印出相同或不同的内容。 例如,文件1将有image1、image2和image3等,然后文件2将有image1、image2和image3等。我需要做这件事。我该怎么做?有人能帮我吗?我不熟悉编程,也不熟悉python。 我尝试了下面的解决方案,但没有成功 import cv2 import numpy as np file1= "C:\Program Files (x86)\Python35-

我想创建一个程序,比较两个图像。我需要从两个不同的文件夹中拍摄图像,并比较它们是否相同。然后我想打印出相同或不同的内容。 例如,文件1将有image1、image2和image3等,然后文件2将有image1、image2和image3等。我需要做这件事。我该怎么做?有人能帮我吗?我不熟悉编程,也不熟悉python。 我尝试了下面的解决方案,但没有成功

import cv2
import numpy as np


file1= "C:\Program Files (x86)\Python35-32\file1" 
file2="C:\Program Files (x86)\Python35-32\file2"
对于文件1中的f1: image1=cv2.imread(f1) 对于文件2中的f2: image2=cv2.imread(f2) 差值=cv2。减去(图像1,图像2)

结果=非np。任何(差异)#如果差异均为零,则返回False

如果结果为真: 打印(“图像相同”) 其他: cv2.imwrite(“result.jpg”,差异) 打印(“图像不同”)

但是上面的代码似乎没有按预期工作。我知道for循环不正确。我是python新手。你能告诉我我做错了什么吗

实际上,我用它来比较移动设备上的自动测试和手动测试的屏幕。这些文件是*.png。 我设法用下面的代码来实现这一点

上面您需要的代码在命令提示符下提供了image1和image2,但是我希望python从一个位置的文件中获取图像,从另一个位置获取图像,并自动进行比较。如果图像是相同的,那么它应该像上面的代码响应一样打印为零。如果它们是不同的,那么它将不是零。 我面临的问题是如何从两个文件中提取数据,并从脚本中逐个进行比较。 如。
File1\Image1.png==File2\Image1.png

使用ImageMagick,它可用于Python,并包含在大多数Linux发行版中。首先熟悉命令行,然后将其转换为Python

创建两个目录

mkdir directory{1..2}
在directory1中创建一个黑色正方形

convert -size 128x128 xc:black directory1/1.png

在directory2中创建一个带有红色10x10矩形的黑色正方形

convert -size 128x128 xc:black -fill red -draw "rectangle 0,0, 9,9"  directory2/2.png

现在让ImageMagick告诉我们两幅图像之间有多少像素不同,
-metric ae
是绝对误差

convert directory1/1.png directory2/2.png -metric ae -compare -format "%[distortion]" info:
输出

100
注1

如果希望使图像几乎相同,可以添加
-fuzz 10%
,这将允许每个像素与另一个图像中的对应像素相差10%,然后再将其计算为不同。这在比较JPEG图像时可能更有用,JPEG图像的质量/量化设置和/或抗锯齿可能略有不同,这两种设置都会导致图像略有不同

注2

您可以使用以下命令从Python中解壳并运行类似于上面所述的shell脚本

注3

如果你创建了一个红色的GIF和一个红色的PNG,然后把它们放在一起,它们会出现相同的结果,就像这样

# Create red GIF
convert -size 128x128 xc:red red.gif
# Create red PNG
convert -size 128x128 xc:red red.png
# Compare and find no difference
convert red.png red.gif  -metric ae -compare -format "%[distortion]" info:
0
尽管这些文件本身有很大的不同

ls -l red*
-rw-r--r--  1 mark  staff  196  1 Apr 11:52 red.gif
-rw-r--r--  1 mark  staff  290  1 Apr 11:52 red.png

什么样的图像?您需要逐像素比较它们吗,还是可以逐字节检查文件是否相同?另一个解决方案“不起作用”的方式是什么?不起作用的方式是什么?显示您的代码并说明出现了哪些错误。那么您想检索两个不同目录中的文件吗?看。是的,我想从一个位置(文件夹1)获取图像文件1(screenshot1.png),从一个位置(文件夹2)获取图像文件2(screenshot2.png),如果屏幕截图相同或不同,请单击comapre。因此,我将有许多截图imgage文件在这两个我想循环通过。