Python3.0 画像ファイルのピクセルデータをソート
Pythonを使って画像ファイルのピクセルデータを色相>彩度>明度の順でソートしようと考えております。
しかし、コード中のコメントにも載せている通り小数点のデータを正しくソートするためにはkey=floatの要素をどこかに追加しなければならないのですが、どのように記述すればよいのでしょうか。
また、ソートする際に2次元に変換して3次元に戻しています。
3次元のままソートすることはできるのでしょうか。
後、今回は色相を優先していますが今後は彩度や明度を優先する機会もあると考えています。
その場合は優先順位をつけて複数のキーの明記が必要になってくると思います。
今回かなり苦戦したのでその時に備えて参考資料としてデータ操作処理の書籍の購入を考えております。
特に複数キーの場合とfloat型でのソート等複数の条件が重なった時の記述方法についての情報がネットではなかなか探しにくかったためそのような本があればいいなと思います。
市販のいい本がありましたら教えてください。
from PIL import Image
import numpy as np
#画像ファイルを読み込み
image_in = Image.open(imagefile)
RGB = np.asarray(image_in)
height, width, datas = np.array(image_in).shape
#RBG→HSVへ変換
image_in_comb = image_in.convert("HSV")
HSV = np.array(image_in_comb)
RGB2 = np.array(image_in_comb) #出力用
#ソートのため三次元から二次元へ変換
HSV_2d = np.zeros((width * height, datas))
for w in range(width):
for h in range(height):
index = h * datas + w
HSV_2d[index] = HSV[h,w]
#色相>彩度>明度の順でソートの予定
sort_data = sorted(HSV_2d, key=lambda x: x[0])
#key=floatを追加したい
#三次元に復元
for w in range(width):
for h in range(height):
index = h * datas + w
RGB2[h,w] = HSV_2d[index]
#RGBに復元
image = Image.new("RGB", (width, height))
image = Image.fromarray(RGB2.clip(0, 255), 'HSV').convert('RGB')
#画像を表示
image.show()