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)
として実行したところ,実行できました.
しかし,望む画像処理ができず,真っ黒になってしまいます.
変換式の過程で小数値が出てくるのですがこれを切り捨てていることが原因であると思っています.
解決策が考え付きません.
なにか良い方法をご教授願います.
回答1件
あなたの回答
tips
プレビュー