前提・実現したいこと
長方形の画像を正方形にリサイズしたいです。
ファイル内の全画像を取り出し、以下の作業を行おうと考えました。
webで調べ、使えそうなソースを見つけたため、活用しています。(https://axa.biopapyrus.jp/deep-learning/sample/image-shape.html 参照)
発生している問題・エラーメッセージ
sample1.jpgを取り出し、リサイズしたいのですが、以下のようなエラーが発生いたします。
また最終的には、sample1.jpgの部分をファイル名”sample”に変更し、ファイル内の画像を一気にリサイズしたいです。ご指摘よろしくお願いいたします。
AttributeError Traceback (most recent call last) <ipython-input-26-a8e71c31a24c> in <module> 24 25 img = cv2.imread('ダウンロード/data/sample/sample1.jpg') ---> 26 img = preprocess(img) 27 img = cv2.resize(img, dsize=(100, 100)) <ipython-input-26-a8e71c31a24c> in preprocess(img) 2 3 def preprocess(img): ----> 4 h, w, c = img.shape 5 longest_edge = max(h, w) 6 top = 0 AttributeError: 'NoneType' object has no attribute 'shape'
該当のソースコード
python
1import cv2 2 3def preprocess(img): 4 h, w, c = img.shape 5 longest_edge = max(h, w) 6 top = 0 7 bottom = 0 8 left = 0 9 right = 0 10 if h < longest_edge: 11 diff_h = longest_edge - h 12 top = diff_h // 2 13 bottom = diff_h - top 14 elif w < longest_edge: 15 diff_w = longest_edge - w 16 left = diff_w // 2 17 right = diff_w - left 18 else: 19 pass 20 21 img = cv2.copyMakeBorder(img, top, bottom, left, right, 22 cv2.BORDER_CONSTANT, value=[0, 0, 0]) 23 return img 24 25img = cv2.imread('sample1.jpg') ###ここの部分をファイル全体にしたい 26img = preprocess(img) 27img = cv2.resize(img, dsize=(100, 100))
###解決法
python
1import cv2 2import matplotlib.pyplot as plt 3 4 5def preprocess(img): 6 h, w, c = img.shape 7 longest_edge = max(h, w) 8 top = 0 9 bottom = 0 10 left = 0 11 right = 0 12 if h < longest_edge: 13 diff_h = longest_edge - h 14 top = diff_h // 2 15 bottom = diff_h - top 16 elif w < longest_edge: 17 diff_w = longest_edge - w 18 left = diff_w // 2 19 right = diff_w - left 20 else: 21 pass 22 23 img = cv2.copyMakeBorder(img, top, bottom, left, right,cv2.BORDER_CONSTANT, value=[0, 0, 0]) 24 25 return img 26 27img = cv2.imread('data/sample/tomato.jpg') 28img = preprocess(img) 29img = cv2.resize(img, dsize=(299, 299)) 30 31plt.imshow(img)
meg_さんのご指摘とおりにひらがなフォルダをなくすため、ファイルをまとめてみると画像表示に関しては解決いたしました。ありがとうございます。
しかし、画像を指定せず、img = cv2.imread('data/sample')に変更するとこれまで同様のエラーが発生してしまいます。やはり一枚一枚画像を指定しなければ実行はできないのでしょうか。。。
回答1件
あなたの回答
tips
プレビュー