」兩者完全相同,但我有所不同。「
但他們不是。
你可以看到這一點,使用下面的代碼,例如:
def show_diff(img1, img2):
diff = Image.new("RGB", img1.size, (255,255,255))
for x1 in range(img1.size[0]):
for y1 in range(img1.size[1]):
x2 = img1.size[0] - 1 - x1
y2 = img1.size[1] - 1 - y1
if img1.getpixel((x1,y1)) != img2.getpixel((x2,y2)):
print(x1,y1,x2,y2)
diff.putpixel((x1,y1), (255,0,0))
diff.show()
img_r = Image.open("img/pacman-r.png")
img_l = Image.open("img/pacman-l.png")
show_diff(img_r, img_l)
導致
(在這裏,這兩個圖像是紅色之間是不同的任何像素。 )
或與
def show_delta(img1, img2):
diff = Image.new("RGB", img1.size, (255,255,255))
for x1 in range(img1.size[0]):
for y1 in range(img1.size[1]):
x2 = img1.size[0] - 1 - x1
y2 = img1.size[1] - 1 - y1
p1 = img1.getpixel((x1,y1))
p2 = img2.getpixel((x2,y2))
p3 = round((p1[0]/2) - (p2[0]/2)) + 128
diff.putpixel((x1,y1), (p3,p3,p3))
diff.show()
img_r = Image.open("img/pacman-r.png")
img_l = Image.open("img/pacman-l.png")
show_delta(img_r, img_l)
這導致
(在此,相當於像素是灰色,而白像素中IMG2標誌着IMG1的像素被設定(暗),同時取消設置和黑色像素表示相反。)
看起來像你懷疑PIL的Image.transpose
方法引起的問題,但源圖像不是只是調換。
Image.transpose
如你所期望的作品 - 所以像:
def diff(img1, img2):
im1 = img1.load()
im2 = img2.load()
images_match = True
for i in range(0, img1.size[0]):
for j in range(0, img1.size[1]):
if(im1[i,j] != im2[i,j]):
images_match = False
return images_match
img_r = Image.open("img/pacman-r.png")
# NOTE: **NOT** Using img_l here
print(diff(img_r, img_r.transpose(Image.FLIP_LEFT_RIGHT).transpose(Image.FLIP_LEFT_RIGHT)))
回報True
。
(這裏,圖像相比其自身的兩次換位版)
看來,他們是不完全一樣的,至少那些PNG似乎沒有高度對齊。將它們轉儲爲字節流或使用圖像工具包進行檢查。 – yacc
謝謝,它看起來同一個肉眼但實際上似乎是一個區別。 –