

画像の輪郭を読み取るコードを書いているのですが、`TypeError: unsupported operand type(s) for -: 'tuple'
and
'int'`というエラーが出てきてしまいます。いろいろ調べてみて`tuple([])`を使ってみてエラーを直しているサイトを見つけて試してみたのですが、治らず、ほかにもいろいろ試してみたのですが結局治らずでここに質問させていただきます

[code]

    import numpy as np
    from skimage import data, io
    import matplotlib.pyplot as plt
    import matplotlib
    img = plt.imread('data/capital_e.png')
    plt.imshow(img)
    verical_filter =[[-1,-2,1],[0,0,0],[1,2,1]]
    horizaontal_filter = [[-1,0,1],[-2,0,2],[-1,0,1]]
    n = img.shape
    m = img.shape
    d = img.shape
    vertical_edges_img = np.zeros_like(img)
    for row in range(3, n-2):
        for col in range(3, m-2):
            local_pixels = img[row-1:row+2,col-1:col+2,0]
            transformed_pixels = verical_filter * local_pixels
            vertical_score = (transformed_pixels.sum() + 4)/8
            vertical_edges_img =[row,col] = [vertical_score] * 3
    
[/code]

エラーメッセージ

[code]

     1 vertical_edges_img = np.zeros_like(img)
    ----> 2 for row in range(3, n-2):
          3     for col in range(3, m-2):
          4         local_pixels = img[row-1:row+2,col-1:col+2,0]
    
    TypeError: unsupported operand type(s) for -: 'tuple' and 'int'
    
[/code]


CC BY-SA 4.0
2023-09-13T06:59:31.117
96201
2023-09-15T02:49:37.877
2023-09-13T07:28:49.877
43025
58066
question
python 画像処理
TypeError: unsupported operand type(s) for -: 'tuple' and 'int'エラーが出る


エラーの内容

> TypeError: unsupported operand type(s) for -: 'tuple' and 'int'

> `-` の被演算子 (operand) として，`tuple` と `int` はサポートされてないよ

といっています．場所は `range(3, n-2)` のところなので，`n` が意図せず `tuple` になってるのでは

→`n` の定義は

[code]

    n = img.shape
    
[/code]

この `img` は

[code]

    img = plt.imread('data/capital_e.png')
    
[/code]

なので，[`plt.imread`](https://matplotlib.org/stable/api/_as_gen/matplotlib.pyplot.imread.html)
が返す
[`numpy.array`](https://numpy.org/doc/stable/reference/generated/numpy.array.html#numpy.array)（このコードでは
`img`） の
[`shape`](https://numpy.org/doc/stable/reference/generated/numpy.ndarray.shape.html#numpy-
ndarray-shape) に対して引き算をしようとしているのでエラーが出ています．たとえば `(2,3,4) - 1`
がエラーになるのは直感的ですよね．

[@metropolis](https://ja.stackoverflow.com/users/47127/metropolis)
さんのコメント通り，もとの意図は `n, m, d = img.shape` だったのでしょう．


CC BY-SA 4.0
2023-09-15T02:49:37.877
96218
2023-09-15T02:49:37.877
2901
96201
answer