今回もPythonでカラーグラフィックを扱います。前回は点の書き込みだけでしたが、casioplotモジュールにはすでに描画された点の色情報を読み出す機能があります。今回はこの機能を利用して画像処理を行ってみます。

点の色情報を読み出す

 グラフィック画面に描かれている点の情報を得るにはcasioplotモジュールのget_pixel()を使います。()の中に読み出したい点の座標値を指定します。原点である左上の座標(0,0)を読み出すには以下のようになります。なお、何も点が表示されていないと読み出した情報を確認できませんので、set_pixel()であらかじめ原点に点を表示してから読み出すようにしています。
 実際のプログラムは以下のようになります。

from casioplot import *
clear_screen()
set_pixel(0,0,(255,128,64))
c=get_pixel(0,0)
print(c)

 これまでと同様にパソコン側でファイルを作成しておき、電卓に転送します。ファイル名はE1.pyとしてあります。実行すると図のようになります。グラフィック画面は表示する必要がないのでシェル画面のみです。

 実行結果を見るとset_pixel()で表示した色情報と異なる結果が表示されています。色の値は赤、緑、青の輝度の1セットで返されます。結果が一致しないのは赤色です。これは一般的なフルカラーの24bit(赤緑青の各8bit=0〜255)ではなく16bitカラーでの計算になるためでしょう。このため書き込んだ値である255は248に補正されて返されることになります。緑や青色の128,64は24bitでも16bitカラーでも同じ値になるので補正などはかからず、そのままの値になります。

各色の値を個別に取り出す

 get_pixel()で読み出した色情報はPythonのタプル型という形式になります。つまり(〜)で示される複数の値がある形です。画像処理を行う場合、ここから赤緑青の各色の値を読み出す必要があります。
 タプル型の値をそれぞれの個別に入れるには,で区切って横に並べまます。例えばrに赤色、gに緑色、bに青色の情報を入れるには以下のようになります。

from casioplot import *
clear_screen()
set_pixel(0,0,(255,128,64))
c=get_pixel(0,0)
print(c)
r,b,g=c
print(r)
print(g)
print(b)

 プログラムはパソコンで作成しておきE2.pyという名前のファイルにして保存し電卓に転送します。電卓側で実行すると以下のようになります。r,g,bの値が行単位で表示されます。

値を読み出して加工して表示する

 点の色情報を読み出せためで、今度は色を加工してグラフィック画面に表示してみます。簡単な画像処理としてカラーの点をグレー(灰色)の点に変換し表示します。なお、加工前と加工後でわかるようにするため、元の点は原点に表示し、加工された点を、その右下に表示します。
 カラーの点をグレーにするには、色々な計算式がありますが、ここでは基本的な割合にしました。以下の計算式です。

灰色の点の輝度 = 赤の点の輝度 × 0.6 + 緑の点の輝度 × 0.3 + 青の点の輝度 × 0.1

 この計算式で得られた値をset_pixel()で指定します。赤緑青の輝度とも全部同じにします。実際のプログラムは以下のようになります。

from casioplot import *
clear_screen()
set_pixel(0,0,(255,128,64))
c=get_pixel(0,0)
r,b,g=c
n=int(r*0.6+g*0.3+b*0.1)
set_pixel(1,1,(n,n,n))
show_screen()

 プログラムはパソコンで作成しておきE3.pyという名前のファイルにして保存し電卓に転送します。電卓側で実行すると以下のようになります。なお、分かりやすくするため左上の部分を拡大した図も用意しておきました。set_pixel()で表示する点の色を変えて、どうなるかやってみてください。

グラフィック画面をグレーにする

 1つの点をグレーにするだけでは面白くありません。そこで、今度はランダムに表示した色と文字をグレーに変換してみます。先ほどのプログラムと大きく違うのはforで繰り返しているという点です。
 まず、グレーに変換する前のランダムに点を表示し、最後に文字を表示するプログラムです。

from casioplot import *
from random import *
clear_screen()
for y in range(128):
  for x in range(128):
    r=randint(0,255)
    g=randint(0,255)
    b=randint(0,255)
    set_pixel(x,y,(r,g,b))
  show_screen()
draw_string(0,50,'fx-CG50',(255,64,64),'large')
show_screen()

 プログラムはパソコンで作成しておきE4.pyという名前のファイルにして保存し電卓に転送します。電卓側で実行すると以下のようになります。

 あとはグレーに変換する部分を追加します。以下のプログラムの後半部分がグレーに変換するところになります。forで繰り返し処理をするだけですので特に説明は不要でしょう。なお、処理は結構遅いので気長に変換されていくのを眺めることになります(プログラムでは横1行処理するごとに画面を表示しています)。

from casioplot import *
from random import *
clear_screen()
for y in range(128):
  for x in range(128):
    r=randint(0,255)
    g=randint(0,255)
    b=randint(0,255)
    set_pixel(x,y,(r,g,b))
  show_screen()
draw_string(0,50,'fx-CG50',(255,64,64),'large')
show_screen()

for y in range(128):
  for x in range(128):
    c=get_pixel(x,y)
    r,b,g=c
    n=int(r*0.6+g*0.3+b*0.1)
    set_pixel(x,y,(n,n,n))
  show_screen()

画像をぼかす(ブラー)

この記事は
Members+会員の方のみ御覧いただけます

ログイン/無料会員登録

会員サービスの詳細はこちら