[英]Python PIL image compare issue
我試圖使用PIL比較2個圖像,下面是我的場景。
IMG1:
IMG2:
img1 = Image.open(img1.png)
img2 = Image.open(img2.png)
我寫了一個簡單的diff函數,如果存在差異則返回-1,如果相同則返回0。
def diff(img1, img2):
im1 = img1.load()
im2 = img2.load()
for i in range(0, img1.size[0]):
for j in range(0, img1.size[1]):
if(im1[i,j] != im2[i,j]):
return -1
return 0
我通過以下內容:
diff(img2, img1.transpose(Image.FLIP_LEFT_RIGHT))
兩者都是完全相同的圖像,但我有所不同。 差異似乎在:[27 84]有人可以解釋一下為什么?
“兩者的圖像完全相同,但我有所不同。”
但他們不是。
你可以看到這個,使用下面的代碼,例如:
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)
結果
(這里,等效像素為灰色,而白色像素表示img1中的像素設置(暗),而未設置為img2,黑色像素表示相反。)
您似乎懷疑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
。
(這里,圖像與自身的兩次轉換版本進行比較)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.