🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
float(CSS)

これはCSSのfloatプロパティのタグです。指定された要素を左または右に寄せて配置する際に使用します。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

ループ

ループとは、プログラミングにおいて、条件に合致している間、複数回繰り返し実行される箇所や、その制御構造を指します

文字コード

文字コードとは、文字や記号をコンピュータ上で使用するために用いられるバイト表現を指します。

Python

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

Q&A

解決済

2回答

1769閲覧

Image.open()で呼び出した画像の配列を計算したときのTypeError

Ai.Mi

総合スコア1

float(CSS)

これはCSSのfloatプロパティのタグです。指定された要素を左または右に寄せて配置する際に使用します。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

ループ

ループとは、プログラミングにおいて、条件に合致している間、複数回繰り返し実行される箇所や、その制御構造を指します

文字コード

文字コードとは、文字や記号をコンピュータ上で使用するために用いられるバイト表現を指します。

Python

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

0グッド

0クリップ

投稿2020/11/26 16:28

前提・実現したいこと

画像を読み込んでガンマ値を調整するプログラムを書いたつもりです。ガンマを0.6から0.9まで変化させたくてループしています。しかし、0.6の時は実行されるのですが、0.7以降ループされずエラーが出てしまいます。
画像の読み込み、ガンマ値をループさせず固定にした時はうまくいったのですが、ループさせてからできなくなりました。よろしくお願いします。

プログラム初心者のため至らぬ点もあると思いますがよろしくお願いします。

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

0.6 0.7 Traceback (most recent call last): File "d:/~~~/change.py", line 40, in <module> im_1 = 255.0 * (picture / 255.0)**(1 /gamma) TypeError: unsupported operand type(s) for /: 'Image' and 'float'

該当のソースコード

python3.7.9

1import cv2 2import numpy as np 3import glob 4import os.path 5import os 6from PIL import Image 7import matplotlib.pyplot as plt 8 9(パス名は省略) 10 11f=open(new_annotation_txt, mode='w') 12f.close() 13 14with open(picture_name_pass , encoding='utf-8!') as picture_name_data: 15 i=0 16 17 for line in picture_name_data: 18 picture_pass0 = line.replace('\n', '') 19 #picture_pass1 = picture_pass0+ ".jpg" 20 picture = np.array(Image.open(picture_pass0), dtype='float16') 21 22 #ガンマ補正 23 gamma=6/10 24 while gamma<1.0:  <-問題点 25 print(gamma) 26 im_1 = 255.0 * (picture / 255.0)**(1 /gamma) 27 im_2 = 255.0 * (picture / 255.0)**gamma 28 29 picture = Image.fromarray(np.uint8(im_1)) 30 #save_pass = picture_pass0 + ".jpg" 31 save_pass =savepoint_pass + str(gamma) + "/" 32                 +picture_pass0.replace(picture_pass, '') 33 picture.save(save_pass) 34 35 picture = Image.fromarray(np.uint8(im_2)) 36 save_pass = picture_pass0 + ".jpg" 37 save_pass =savepoint_pass + "1_" + str(gamma) + "/" 38                 +picture_pass0.replace(picture_pass, '') 39 40 picture.save(save_pass) 41 gamma+=1/10 42 43 i+=1 44 print(i) 45 picture.close()

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

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

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

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

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

guest

回答2

0

ベストアンサー

whileに入る前のpictureはnp.arrayですが、whileのなかでpictureをImage.fromarrayで更新してImageオブジェクトになってるのが原因ではないでしょうか。

投稿2020/11/26 23:17

fsoe

総合スコア163

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

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

Ai.Mi

2020/11/27 00:31

確かに一度更新したのを用いてしまっていました。一度他の変数に代入してやることで解決しました。 とても簡易的なミスでした。ありがとうございます。
guest

0

#問題点を抜粋
gamma_list=[0.6,0.7,0.8,0.9]  <-gamma+=0.1の場合、0.7999999となってしまったため一応
num=0
while num<len(gamma_list):
pic =picture      
<-pictureを書き換えてしまっては元画像をループしても使えないため他の変数に代入
gamma=gamma_list[num]
print(gamma)
im_1 = 255.0 * (pic / 255.0)**(1 /float(format(gamma, '.1f')))
im_2 = 255.0 * (pic / 255.0)**float(format(gamma, '.1f'))
pic = Image.fromarray(np.uint8(im_1))
save_pass =savepoint_pass + str(format(gamma, '.1f')) + "/"
+picture_pass0.replace(picture_pass, '')
pic.save(save_pass)

投稿2020/11/27 00:35

Ai.Mi

総合スコア1

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問