

vertical
filterという名前のファンクション作り、それを使い画像の縦の部分を検知し横の部分との識別をし、白と黒に分けて新たな画像を作るというものを作っています。  
ファンクションにする前のコードでは自分が思うような画像を出すことができるのですが、ファンクションに書き換えるとうまく動きません。自分の書き直し方が違うというのは分かっているのですが、どう書き直せばいいのか分からなかったのでこちらで質問させていただきました。以下に元のコードとそこから出来上がった画像。ファンクションに書き直した時のコードとそこからできた画像を張っているのでご確認お願い致します。白黒の画像が自分が求めている結果で、カラーの方がオリジナルの画像でありファンクションを通した結果の画像です

元のコード

[code]

    import numpy as np
    from skimage import data, io
    import matplotlib.pyplot as plt
    import matplotlib
    !pip install scikit-image
    
    verical_filter =[[-1,-2,-1],[0,0,0],[1,2,1]]
    #with vertical filter
    vertical_edges_img = np.zeros_like(img) #it is going to be initially all zeros
    for row in range(3, n-2): #loop every single pixels
        for col in range(3, m-2):
            local_pixels = img[row-1:row+2,col-1:col+2,1] 
            transformed_pixels = verical_filter * local_pixels
            vertical_score = (transformed_pixels.sum() +4)/8 
           
        vertical_edges_img[row, col] = [vertical_score] * 3
    
    
    
    
    plt.imshow(vertical_edges_img)
    
[/code]

[![vertical
filterを使った後の画像](https://i.stack.imgur.com/8CFMw.png)](https://i.stack.imgur.com/8CFMw.png)

書き直し後のコードimportの部分は省略

[code]

    def vertical_img(img):
    verical_filter =[[-1,-2,-1],[0,0,0],[1,2,1]] 
    vertical_edges_img = np.zeros_like(img) 
    upsidedown_pic = np.array(img)
    for row in range(3, n-2): #loop every single pixels
        for col in range(3, m-2):
            local_pixels = img[row-1:row+2,col-1:col+2,1] 
            transformed_pixels = verical_filter * local_pixels
            vertical_score = (transformed_pixels.sum() +4)/8 
            vertical_edges_img[row, col] = [vertical_score] * 3
    
    return upsidedown_pic
    
    
    vert_img = vertical_img(img)
    plt.imshow(vert_img)
    
[/code]

[![ファンクションを通した後の画像（オリジナルの画像と一緒）](https://i.stack.imgur.com/aLATM.jpg)](https://i.stack.imgur.com/aLATM.jpg)


CC BY-SA 4.0
2023-09-17T19:21:39.930
96242
2023-09-18T01:35:15.033
2023-09-17T19:26:22.140
58066
58066
question
python 画像処理
ファンクションがエラーは出ないのにうまく動かない


ソースコードが適切なものになったとして、書き直し版で加わった処理は初期化した`upsidedown_pic =
np.array(img)`を何もしないで戻り値にしています。`return upsidedown_pic`

書き直しが単なる関数化を目的としたものであるなら、`upsidedown_pic`関連の処理は削除して戻り値を`return
vertical_edges_img`とするだけで良いのでは？

あるいは`upsidedown_pic`という名前からして、何かしら追加の処理を行うつもりなら、`return
upsidedown_pic`の前に`vertical_edges_img`から`upsidedown_pic`に変換なり加工なりする処理を入れる必要があるでしょう。


CC BY-SA 4.0
2023-09-18T00:51:36.603
96244
2023-09-18T01:35:15.033
2023-09-18T01:35:15.033
26370
26370
96242
answer