Python Base64图像比较

Python Base64图像比较,python,c++,image,base64,Python,C++,Image,Base64,假设我有两个图像A和B,大小相同,通道数相同,格式相同(例如PNG中大小为25x25的两个RGB图像) 我想比较这两幅图像,并根据每个像素上的差异之和对这两幅图像的差异进行评分。但是,这些图像是按格式编码的(就像HTML页面中的图像) 我的问题是,总结Base64格式中每个字符的差异是否一定能够估计A和B的不同或相似之处 我用Python编写了一个测试来生成三个随机图像img1、img2、img3。然后首先逐像素比较它们,然后比较它们的Base64版本。我试着看看img1是否与img2或img3

假设我有两个图像A和B,大小相同,通道数相同,格式相同(例如PNG中大小为25x25的两个RGB图像)

我想比较这两幅图像,并根据每个像素上的差异之和对这两幅图像的差异进行评分。但是,这些图像是按格式编码的(就像HTML页面中的图像)


我的问题是,总结Base64格式中每个字符的差异是否一定能够估计A和B的不同或相似之处

我用Python编写了一个测试来生成三个随机图像
img1、img2、img3
。然后首先逐像素比较它们,然后比较它们的Base64版本。我试着看看
img1
是否与
img2
img3
更相似,然后测试两个比较是否相关

答案是否定的。它们是不相关的。在我的测试中,1000次测试中有488次它们没有相关性

将numpy导入为np
导入base64
#生成具有随机值的图像
def生成_图像():
img=np.random.random((10,10,3))*255
返回np.uint8(img)
#基于像素间比较的第一种比较方法
def比较(img1、img2):
返回np.sum(np.abs(img1-img2))
#基于比较Base64版本的第二种比较方法
def compare_base64(img1、img2):
b1=列表(base64.b64编码(img1))
b2=列表(base64.b64编码(img2))
范围(len(b1))内i的返回和(abs(b1[i]-b2[i]))
#测试两种方法是否显示img1是否更接近img2或img3
def相关性测试():
img1=生成_图像()
img2=生成_图像()
img3=生成_图像()
#img1更接近img2或img3
#测试像素对像素的比较
cmp12=比较数值(img1、img2)
cmp13=比较数值(img1、img3)
如果cmp12
不,没有。几个像素的LSB中的一个位差异可能会导致完全不同的文件。您试图实现什么样的相似性度量?例如,如果一个图像是另一个图像的移位版本,那么该图像是否可检测?@MarkSnyder仅在像素对像素比较时求和。如果一个人被移动,他们不一定是相似的。仅将每个像素与同一索引中的另一个像素进行比较。@MarkSetchell要澄清的是,较大的差异将来自PNG应用的压缩,而不是来自base64的编码。它不会工作。Base64 enc/dec速度非常快。如果编写正确,编译器将生成矢量化代码。查看boost实现-如果不想包含库,可以轻松复制它。