2016-04-06 17 views
0

Aşağıdaki, aynı boyuttaki iki resmin piksel farkını bulmak için python'da opencv'yi kullanarak koddur. Ancak, bana son satırda bir hata veriyor ve nasıl düzelteceğimi bilmiyorum.DizinError iki görüntünün piksel farkını bulma

if h1==h2: 
    if w1==w2: 
     c=np.zeros((h1,w1,3),np.uint8) 
     for i in range(img1.shape[0]): 
      for j in range(img1.shape[1]): 
       c[j][i]=img1[j][i]-img2[j][i] 

IndexError: index 480 is out of bounds for axis 0 with size 480

+0

değerli yanıtlar için teşekkürler .. Ama, bunun bir hata TypeError döndürür suggested.But bu yöntemler denedik: Liste endeksleri bir şekilde göstermek için bir dizi olarak i bileşkesini saklayabilirsiniz nasıl kayıt düzeni tamsayılar olmamalıdır görüntüsü. – RIYA

cevap

1

Sen indeksleri karışık; i, img1.shape[0]'a aittir. Eğer veri türü ile dikkatli olmak zorunda dedi

img1[j][i]-img2[j][i] 

, numpy sizin için bu süreci vectorise ve sadece Ancak

if img1.shape == img2.shape: 
    c = img1 - img2 

yapabilirsiniz. Bir görüntüdeki piksel 0, diğerinde 32 ise ne olur?

>>> np.uint8(0) - np.uint8(32) 

Warning (from warnings module): 
    File "__main__", line 2 
RuntimeWarning: overflow encountered in ubyte_scalars 
224 

Sen farkı tamsayılar onları dönüştürmek istiyorum ve 0-255 aralığında farkı tutmak istiyorsanız, bunu mutlak alabilir.

c = img1.astype(int) - img2.astype(int) 
# you can optionally do the following depending on what you want to do next 
c = np.abs(c).astype(np.uint8) 

OpenCV cv2.absdiff(), sizin için tüm bu başarır bir işlev diyor.

c = cv2.absdiff(img1, img2) 
+0

Bu soru etiketli olduğundan, 'cv2.absdiff' ifadesini kullanmak isteyebilirsiniz, çünkü bu soru hakkında OpenCV – Miki

+1

@Miki Evet, sadece okuyordum ve birlikte deneme yapıyordum. Hayatımı kolaylaştırdığın için teşekkürler. – Reti43

İlgili konular