

Pythonで画像認識のための学習データを準備するために、OpenCVを使って以下の各フォルダの中にある画像をすべて、短いほうの辺に合わせて正方形にクリッピングし保存するプログラムを書いています。

[code]

    data/arisu
    　　/aya
    　　/karen
    　　/shino
    　　/youko
    
[/code]

しかし、これを実行すると、ファイルを探せないのかエラーが出てしまいます。

[code]

    　height, width = img.shape[:2]
    AttribteError: 'NoneType' object has no attribte 'shape'
    
[/code]

ファイル・フォルダを取得したfor文を書いたことがなかったため未熟な点もありますが、どなたかわかる方がいたら教えてください。

[code]

    import os
    import cv2
    dirs = ['arisu', 'aya', 'karen', 'shino', 'youko']
    for i in range(len(dirs)):
        d = dirs[i]
        files = os.listdir("../data/" + d)
        for j in range(len(files)):
            f = files[j]
            img = cv2.imread("../data/" + d + "/" + f)
            height, width = img.shape[:2]
            if(height > width):             #縦長だった場合
                clp = img[0:width, 0:width] #左上からwidthの長さの正方形にクリップ
    
            if(height < width):                 #横長だった場合
                offset = ((width//2)-(height//2))   #左側の余白部分をoffset
                clp = img[0:height, offset:offset+height]   #offsetの位置からheightの長さの正方形にクリップ
                cv2.imwrite("../data/" + d + "/" + f, clp)
    
[/code]


CC BY-SA 4.0
2017-09-27T05:18:49.607
38226
2022-04-14T11:04:05.370
2021-02-01T11:52:08.930
3060
25555
question
python python3 opencv
画像ファイルが読み込めず、shapeを取得することができない。


cv2.imreadした後、`if img !=
None:`を挟み、Noneだったときはprint("失敗")だけしてfor文の頭に戻る、という仕様変更をしたところ、正しく動きました。

* * *

この投稿は @3614013 s
さんの[コメント](https://ja.stackoverflow.com/questions/38226/#comment38476_38226)などを元に編集し、[コミュニティWiki](https://ja.meta.stackoverflow.com/q/1583)として投稿しました。


CC BY-SA 4.0
2021-02-01T11:23:45.787
73737
2021-02-01T11:23:45.787
9820
38226
answer