t-hom’s diary

主にVBAネタを扱っているブログ…とも言えなくなってきたこの頃。

Arduino Dueでオシロスコープに画像を表示してみた。

これは前回の続き記事となる。
thom.hateblo.jp

前回は円を描いただけなんだけど今回はモノクロビットマップデータを表示してみた。

といっても適当なモノクロ画像がなかったのでとりいそぎHello Worldと書いた画像を使用。

出力した結果はこちら。

波形はこんな感じ。


これ実は1マス5ミリ秒くらいに調整するとすごく分かりやすい波形になっていて面白い。


ソースコードはこんな感じで配列化した画像データが直書きされている。

※はてな記法でうまくソースコードを認識しなかったので画像で貼り付けました。もし真似したい方がいれば頑張って写経してください。

容量節約のため黒点が存在するところだけX,Yデータを格納している。

今回は150x150サイズの画像を使ったのだがDAC出力には0~4095を指定できるのでそのまま入力するとかなり表示が小さくなってしまう。そこでソースコード上で座標を10倍している。それでもX・Yの最大は1500なので20倍で良かったかもしれない。オシロ側で表示位置とサイズを調整する際にけっこう拡大する羽目になってしまった。


画像をデータ化する際は次のPythonプログラムを利用した。

from PIL import Image

img = Image.open('sample.png')
width, height = img.size

x_list = []
y_list = []

for y in range(0, height):
    for x in range(0, width):
        if sum(img.getpixel((x, y))) == 0:
            x_list.append(x)
            y_list.append(y)

print(x_list)
print("--------")
print(y_list)

PILライブラリで画像の縦・横サイズ分ループでピクセルごとのカラーを取得し、R・G・B値の合計が0なら黒と見做してX・Y座標をそれぞれのリストに格納していくという処理である。

1点注意が必要なのはピクセルのY座標とオシロのY座標が反転して表示されるということ。

プログラム上で工夫しても良いけど、画像の上下反転の方が楽なので今回はこんな感じで反転させてからデータ化した。

当初やりたかった任意画像の表示ができたので今回はここまで。

当ブログは、amazon.co.jpを宣伝しリンクすることによってサイトが紹介料を獲得できる手段を提供することを目的に設定されたアフィリエイト宣伝プログラムである、 Amazonアソシエイト・プログラムの参加者です。