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

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

詳細はこちら
Python

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

Q&A

解決済

1回答

4023閲覧

python:1ピクセルずつ処理したい

H.haha

総合スコア18

Python

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

0グッド

0クリップ

投稿2019/10/23 06:12

編集2019/10/23 06:44

python

1#coding:utf-8 2from PIL import Image 3import cv2 4import numpy as np 5import os 6 7#画像の読み込み 8im = Image.open("sample.png") 9 10#RGBに変換 11rgb_im = im.convert('RGB') 12 13#画像サイズを取得 14size = rgb_im.size 15 16#取得したサイズと同じ空のイメージを新規に作成 17img = Image.new('RGBA',size) 18 19#loop 20#x 21for x in range(size[0]): 22 #y 23 for y in range(size[1]): 24 #ピクセル取得 25 r,g,b = rgb_im.getpixel((x,y)) 26 27 #RGBtoXYZ変換式 28 29 #XYZtoL*a*b*変換式 30 #L*値を変更 31 32###RGBに戻す### 33 #L*a*b*toXYZ変換式 34 #XYZtoRGB変換式 35 R1=((3.2410*X) - (1.5374*(Y)) - (0.4986*Z)) 36 G1=((-0.9692*X) + (1.8760*(Y)) + (0.0416*Z)) 37 B1=((0.0556*X) - (0.2040*(Y)) + (1.0507*Z)) 38 39 r=R1 40 g=G1 41 b=B1 42 43 44 #set pixel 45 img.putpixel((x,y),(r,g,b,0)) 46 47#show 48img.show() 49

画像のL*値を1ピクセルずつ変更して画像に戻したいです.
上記プログラム(変換式は省略しています)を実行すると,

python

1return self.im.putpixel(xy, value) 2TypeError: integer argument expected, got float

というエラーが出ます.
そこで,

     r=int(R1) g=int(G1) b=int(B1)

として実行したところ,実行できました.
しかし,望む画像処理ができず,真っ黒になってしまいます.
変換式の過程で小数値が出てくるのですがこれを切り捨てていることが原因であると思っています.
解決策が考え付きません.
なにか良い方法をご教授願います.

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

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

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

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

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

tiitoi

2019/10/23 06:34 編集

画像の画素値は 0 ~ 255 の整数で表現されるという点は認識されていますか?
H.haha

2019/10/23 06:41

そうでした.ご指摘ありがとうございます.
guest

回答1

0

ベストアンサー

xyかvalueが小数点型になっています。
整数型しか指定できません

投稿2019/10/23 09:31

yamato_user

総合スコア2321

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

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

H.haha

2019/10/25 06:17

整数型でしかできないのですね. ありがとうございました.
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問