两张肉眼看起来没啥区别的图片,在计算机眼里真的是一样的吗?
答案显然是有可能会不一样,因为计算机用数字来进行储存,我们得从根本上去找茬~
以下给出的分别是(1)只处理两张的代码 和(2)处理检查大批次两个文件夹的图片的像素代码
(1)只处理两张的代码
使用scipy.misc库的imread函数进行读取
#检查两张图片的像素差异
import numpy as np
import os
import matplotlib.pyplot as plt
from scipy.misc import imread
old_address = "/home/NEWDISK/output.png" #原图
new_address = "/home/NEWDISK/huang.png" #需要比对的图片
eps = 16
a=0
f=tf.gfile.Open(old_address, 'rb')
img = imread(f, mode='RGB').astype(np.float)
ff=tf.gfile.Open(new_address, 'rb')
ims = imread(ff, mode='RGB').astype(np.float)
for i in range(299):
for j in range(299):
for k in range(3):
if (abs(int(img[i, j, k]) - int(ims[i, j, k])) >0):
print(abs(int(img[i, j, k]) - int(ims[i, j, k])))
a+=1
print(a)
使用PIL.image的open函数进行读取
#检查两张图片的像素差异
from PIL import Image
import numpy as np
import os
import matplotlib.pyplot as plt
old_address = "/home/NEWDISK/CAAD/wujiekd/caad代码/b6808667896525a4 (1).png"
new_address = "/home/NEWDISK/CAAD/wujiekd/caad代码/b6808667896525a4.png"
a=0
img = np.array(Image.open(old_address))
ims = np.array(Image.open(new_address))
for i in range(299):
for j in range(299):
for k in range(3):
if (abs(int(img[i, j, k]) - int(ims[i, j, k])) > 16):
print(abs(int(img[i, j, k]) - int(ims[i, j, k])))
a+=1
print(a)
(2)处理检查大批次两个文件夹的图片的像素代码
#检查两个批次图片的像素差异(大量处理)
from PIL import Image
import numpy as np
import os
import matplotlib.pyplot as plt
old_address = "/home/NEWDISK/caad_images/images"
new_address = "/home/NEWDISK/CAAD_ATTACK_PHOTO/7.25_output_iter50_mix590_submit"
good = 0 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
sum =0
filelist = os.listdir(new_address)
for item in filelist:
if item.endswith('.png'):
sum+=1
a = 0
old_str = old_address + '/' + item
new_str = new_address + '/' + item
img = np.array(Image.open(old_str))
ims = np.array(Image.open(new_str))
for i in range(299):
for j in range(299):
for k in range(3):
if (abs(int(img[i, j, k]) - int(ims[i, j, k])) > 16):
print(item)
good+=1
a = 1
break
if a == 1:
break
if a == 1:
break
print(sum)
print(good)
print(sum-good)