2016-05-24 5 views
1

私はMoravec検出を使用しようとしています。このコードを実行しようとすると、何らかのエラーが発生します。TypeError: - : 'tuple'と 'tuple'のためのサポートされないオペランドタイプ

 diff = diff - image.getpixel((x, y)) 
TypeError: unsupported operand type(s) for -: 'tuple' and 'tuple' 

どうすれば修正できますか?どんな助けもありがとう。コードは次のとおりです。

def moravec(image, threshold = 100): 
    """Moravec's corner detection for each pixel of the image.""" 

    corners = [] 
    xy_shifts = [(1, 0), (1, 1), (0, 1), (-1, 1)] 

    for y in range(1, image.size[1]-1): 
     for x in range(1, image.size[0]-1): 
      # Look for local maxima in min(E) above threshold: 
      E = 100000 
      for shift in xy_shifts: 
       diff = image.getpixel((x + shift[0], y + shift[1])) 
       diff = diff - image.getpixel((x, y)) 
       diff = diff * diff 
       if diff < E: 
        E = diff 
      if E > threshold: 
       corners.append((x, y)) 

    return corners 

if __name__ == "__main__": 
     threshold = 100 

     image = Image.open('all.jpg') 
     corners = moravec(image, threshold) 
     draw_corners(image, corners) 
     image.save('low2.png') 
+0

タプルを別のタプルから直接減算することはできません。代替案[here](http://stackoverflow.com/questions/17418108/elegant-way-to-perform-tuple-arithmetic)を参照してください。 –

答えて

4

あなたは(RGB値を持つ)2つのタプルを減算するしようとしている、と*-などのタプル上の算術演算が定義されていません。

距離を見つけるには、あなただけのこの操作を行うことができます:

c1 = image.getpixel((x + shift[0], y + shift[1])) 
c2 = image.getpixel((x, y)) 
diff = (c1[0] - c2[0]) ** 2 + (c1[1] - c2[1]) ** 2 + (c1[2] - c2[2]) ** 2 
if diff < E: 
    E = diff 

仮にもそれはあなたが慣れているものかどうドットの製品と箱から出し作業算術演算を取得するためにnumpyを使用することができ、ものの

import numpy as np 

c1 = image.getpixel((x + shift[0], y + shift[1])) 
c2 = image.getpixel((x, y)) 
diff = (np.diff([c1, c2]) ** 2).sum() 
if diff < E: 
    E = diff 
+0

詳細な回答ありがとう! :)) – Lipstick

関連する問題