2016-04-06 13 views
0

これはpythonでopencvを使って、同じサイズの2つの画像の画素差を求めるコードです。しかし、それは私に最後の行にエラーを与え、私はそれを修正する方法を知らない。2枚の画像の画素差分を求めるIndexError

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

あなたの貴重な回答に感謝を..しかし、私はあなたがそれがエラーTypeError例外を返しsuggested.Butこの方法を試してみました:リストインデックスは整数でなければなりません、私のようにそれを表示する配列として結果を保存することができますどのようにタプルありません画像。 – RIYA

答えて

1

あなたはインデックスを混ぜ; iimg1.shape[0]に属します。

numpyのがあなたのためにこのプロセスをvectoriseことができますし、単にしかし、あなたはデータの種類に注意する必要が

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

を行うことができます、と述べた

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

。 1つの画像のピクセルが0で、もう1つのピクセルが32の場合はどうなりますか?

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

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

あなたは違いを整数に変換したいとあなたは0から255の範囲の違いを維持したい場合、あなたはその絶対を取ることができます。

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()と言います。

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

この質問はタグ付けされているので、 'cv2.absdiff'に言及したいかもしれません。OpenCV – Miki

+1

@Mikiはい、私はそれについて読んでいて、パッケージを試していました。私の人生を楽にしてくれてありがとう。 – Reti43

関連する問題