前提
pythonで画像の輝度値を取得しcsvに保存するプログラムを作っています。
取得したcsvファイルのセル(A1頭で表される値の収納される場所)に(57, 57, 57)のように括弧の中に輝度値が入れられる不具合が起きています.
画像自体に問題があるのでしょうか.同じような問題に遭遇した方から助言頂ければと思います.
実現したいこと
セルに数字のみを表示されるようにしたいです.img = img.convert("L")を追加することで解決しました.ありがとうございます.
ソースコード
python
1import csv 2from PIL import Image 3import cv2 4import numpy as np 5import glob 6 7# 画像読込 8 9for i in range(10,30,10): 10 # 画像読込 11 img = Image.open("img_00"+str(i)+"mask.jpg") 12 #img = Image.open("Capture_%05d.png".format(i)) 13 14 width, height = img.size 15 16 ######################################################## 17 # 輝度値の取得、CSVファイルに保存 18 19 # 画像の輝度値をlistで取得 20 data = list(img.getdata()) 21 22 # 輝度値をCSVファイルで保存 23 with open('image_data' + str(i) + '.csv', 'w', newline='') as csvfile: 24 spamwriter = csv.writer(csvfile) 25 26 # 画像データを一行ごと書き込み 27 x = 0 28 for y in range(height): 29 # 一行分のデータ 30 line_data = data[x:x+width] 31 # 一行分のデータを書き込み 32 spamwriter.writerow(line_data) 33 x += width
> csvファイルのセルに
「csvファイルのセル」とは何のことでしょうか?
> 取得したcsvファイルのセルに(57, 57, 57)のように括弧の中に輝度値が入れられる不具合が起きています.
不具合ではなく、dataがタプルのリストだからではないでしょうか? 数値のみが良いのであればタプルから数値を取り出して出力すれば良いかと思います。
「輝度値」ということであれば、画像データを grayscale に変換する必要があります。具体的には以下の様にします。
# 画像読込
img = Image.open("img_00"+str(i)+"mask.jpg")
img = img.convert("L") # 追加
width, height = img.size
> (57, 57, 57)のように括弧の中に輝度値が入れられる不具合が起きています.
画像自体に問題があるのでしょうか.
数字が三つ並んでるのは、それぞれ画像の赤・緑・青の値です
それらがカッコの中に入ってるのは、Pillow(PIL)の仕様です
https://imagingsolution.net/program/python/pillow/getpixel_putpixel/#toc1
melianさんが書いてるグレースケールに変換する方法の他に、画像の赤・緑・青のどれか一つだけ取り出してもカッコはなくなります
https://yu-nix.com/archives/python-pillow-image-getdata/#%E3%83%90%E3%83%B3%E3%83%89R%E3%81%AE%E3%83%94%E3%82%AF%E3%82%BB%E3%83%AB%E5%88%97%E3%82%92%E5%8F%96%E5%BE%97%E3%81%99%E3%82%8B
> img = img.convert("L")を追加することで解決しました.
自分で回答を書いて「自己解決」にしてください
回答1件
あなたの回答
tips
プレビュー