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

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

新規登録して質問してみよう
ただいま回答率
85.50%
リサイズ

コントロール、ウィンドウ、フォームやスクリーンのサイズ変更を指します。

Python

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

Q&A

解決済

1回答

2892閲覧

画像の抜き出しとリサイズの際のエラー

hoku_mhib

総合スコア1

リサイズ

コントロール、ウィンドウ、フォームやスクリーンのサイズ変更を指します。

Python

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

0グッド

0クリップ

投稿2020/06/15 08:21

前提・実現したいこと

任意のディレクトリ内から画像を読み込み、中央の任意のサイズを抜き取りリサイズをかけたいと思っております。

発生している問題・エラーメッセージ

自分で確認したところリサイズ後のimwriteでエラーが出ているっぽいのですが原因がわかりません。

TypeError: img is not a numpy array, neither a scalar

該当のソースコード

Python

1import os 2import glob 3import sys 4import cv2 5import copy 6import pathlib 7 8from programs.utils import checker 9from programs.mk_data.mk_ameddata import MkData 10 11def resize(img, size): 12 img_ = [ 13 cv2.resize(im, size) 14 for im in img 15 ] 16 17 return img_ 18 19def bundle_expansion(load_dir, dir, save_path, save_folder, size): 20 """ 21 指定されたディレクトリ内のデータセットの拡大 22 23 Args: 24 load_dir:画像のあるディレクトリ名 25 save_path:保存する場所へのパス 26 save_folder:保存するためのフォルダ名 27 size:リサイズ後のサイズ 28 """ 29 30 save_path = pathlib.Path(save_path) 31 load_dir = pathlib.Path(load_dir) 32 save_folder = pathlib.Path(save_folder) 33 34 path_save = save_path/save_folder 35 36 try: 37 path_save.mkdir(parents=True) 38 except FileExistsError as e: 39 if not checker.overwrite(e): 40 sys.exit("stop running") 41 42 img_list = glob.glob(dir + '*') 43 name_list = [] 44 ext_list = [] 45 46 if not load_dir.exists(): 47 raise FileNotFoundError(load_dir) 48 49 for img in img_list: 50 file = os.path.basename(img) # 拡張子ありファイル名を取得 51 name, ext = os.path.splitext(file) # 拡張子なしファイル名と拡張子を取得 52 name_list.append(name) # 拡張子なしファイル名をリスト化 53 ext_list.append(ext) # 拡張子をリスト化 54 im = cv2.imread(img, 0) 55 56 output_path = os.path.join(*[path_save/save_folder, name + ext]) 57 58 img_ = im[6:58,6:58] 59 60 image = resize(img_, size) 61 cv2.imwrite(output_path, image) 62 return 63 64if __name__ == '__main__': 65 bundle_expansion( 66 './data/abdomen64/train/tumor', './data/abdomen64/train/tumor', 67 './data/abdomen64/train', 'exp_tumor', (64,64))

試したこと

output_pathの確認や抜き出してくるサイズの変更など

補足情報(FW/ツールのバージョンなど)

VscodeでPyton3.6.9を使っています。

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

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

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

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

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

guest

回答1

0

ベストアンサー

TypeError が起こった場合は、関数に想定されていない型のオブジェクトが渡されたということを意味しています。

cv2.imwrite(output_path, image)
TypeError: img is not a numpy array, neither a scalar

エラーの発生箇所と内容をあわせると、第2引数に numpy 配列またはスカラー以外の型のオブジェクトが渡されたと言われています。
実際に print(type(image)) で型を確認すると、list になっているのでこれがエラーの原因であるとわかります。


image = resize(img_, size) なので、resize() 内を見ると以下のようにリストを返すようになっているのが問題であるとわかります。

python

1def resize(img, size): 2 img_ = [ 3 cv2.resize(im, size) 4 for im in img 5 ] 6 7 return img_

image = resize(img_, size) の部分は単に image = cv2.resize(img_, size) ではダメなのでしょうか?

投稿2020/06/15 08:42

編集2020/06/15 08:43
tiitoi

総合スコア21956

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

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

hoku_mhib

2020/06/16 02:44

ありがとうございました。そこでのエラーは消えたのですがまた他のエラーが出てきました。(笑) 初心者ですが奮闘したいと思います!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問