質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

2035閲覧

画像を正方形にリサイズ

hanaaaa

総合スコア5

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2020/10/14 11:48

編集2020/10/15 01:25

前提・実現したいこと

長方形の画像を正方形にリサイズしたいです。
ファイル内の全画像を取り出し、以下の作業を行おうと考えました。
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')に変更するとこれまで同様のエラーが発生してしまいます。やはり一枚一枚画像を指定しなければ実行はできないのでしょうか。。。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

meg_

2020/10/14 11:59

エラーは全文掲載してください。
hanaaaa

2020/10/14 12:10

大変し訳ございません。修正いたしました。 また、エラー内容にも誤りがあったため、修正いたしました。
meg_

2020/10/14 12:48

> img = cv2.imread('ダウンロード/data/sample/sample1.jpg') 上記コード部分で画像が読み込み出来ていません。パスが間違っているかと思います。 ※読み込みに失敗するとimgがNoneとなります。
meg_

2020/10/14 12:53 編集

確か日本語を含むパスはNGだったような気がします。フォルダ名を変えて試してみてください。
hanaaaa

2020/10/15 01:28

日本語の部分を変更すると実行することができました。ありがとうございます。 また、ファイルごと実行しようとすると同様のエラー(追記:「解決法」参照)となってしまうのですが、これにはどのような原因が考えられますでしょうか...可能であればご返信お待ちしております。
meg_

2020/10/15 10:47 編集

ドキュメント(http://whitewell.sakura.ne.jp/OpenCV/py_tutorials/py_gui/py_image_display/py_image_display.html)に下記説明があります。ファイル名のみ有効です。 > 画像ファイルを読み込むには cv2.imread(path, option) 関数を使う.これはNumpyのarrayを返す > 第1引数 path: 画像ファイルが作業ディレクトリ内に保存されている場合はファイル名のみを指定し, そうでない場合は絶対パスか適切な相対パスで指定する.
hanaaaa

2020/10/19 00:57

ご返答が遅くなり申し訳ございません。解決いたしました。ありがとうございます
guest

回答1

0

自己解決

画像ファイルのパスミスでした。img = cv2.imread('data',0)で解決

投稿2020/10/19 01:03

hanaaaa

総合スコア5

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問