数値計算なんかをしていると、座標ごとの数値の大小を表すファイルが出力されることはよくあります。
今回は、そんなテキストファイルから画像を作成する方法をご紹介します。
(この記事では取り扱いを簡単にするために白黒画像で説明します。)
ご存じの方も多いと思いますが、コンピュータでは、白を255, 黒を0というように色の濃度を数字の大きさによってあらわしています。そのため、数字の大小を表す分布データさえあれば、それを簡単に画像にすることが可能です。
イメージを持ってもらうためにデータをつくるところからやってみましょう。
まずはエクセルを使って数値の分布ファイルを作ってみましょう。
私は以下のように左上から右下にかけて255を入力し、その他は0となるデータを作成しました。今回は600×600のデータを作成しています。
データ作成用VBAプログラム
For i = 1 To 600
For j = 1 To 600
If Abs(i - j) < 5 Then
Cells(i, j) = 255
Else
Cells(i, j) = 0
End If
Next
Next
End Sub
次に、エクセルで作ったデータをコピーし、テキストファイルに張り付けましょう。
コピー&ペイストでOKです。
このとき私はdata.txtという名前で保存しています。
実際のテキストファイルはこんな感じ。
前準備が終わったところで早速本題に入っていきましょう。
プロンプトから先ほど作成したテキストファイルが置いてある場所に移動し、pythonを起動しましょう。
あとは以下のプログラムを実行するだけです。
aaa=np.loadtxt('data.txt')
cv2.imwrite('test.jpg',aaa)
※openCVやnumpyはインストールする必要があります。</dp
pythonプログラムを実行した結果、test.jpgとして以下のような画像が出力されました。
白い部分が255の数値が入っている場所、黒い部分が0の数値が入っている場所です。たったの4行のプログラムで、簡単にテキストファイルから画像を作ることができましたね。
今回のポイントはnp.loadtxtでテキストファイルの行列データを読み込み、そのデータをcv2.imwriteで画像にした点です。
次に、もう少しこのスキルを応用してみましょう。
先ほどのエクセルファイルを少しいじってみます。
下の画像のように、先ほど作ったデータの上に0の数値が入った行をいくつか挿入してみましょう。
※挿入した分、下行を削除しておきましょう。画像サイズが異なると、うまく処理ができないためです。
このデータを先ほどと同じ要領でテキストデータに張り付けます。
私はdata2.txtとして保存しました。
それでは次に、これらのデータを足し合わせた画像を作成してみます。
import numpy as np
aaa=np.loadtxt('data.txt')
bbb=np.loadtxt('data2.txt')
ccc=aaa+bbb
cv2.imwrite('test2.jpg',ccc)
pythonプログラムを実行した結果、test2.jpgとして以下のような画像が出力されました。
numpyの便利なところはそれぞれ行列を宣言しておけば、あとは普通の演算式で各配列内内部を処理してくれるという点です。
頻繁につかうスキルですので必ず覚えておきましょう。
このようにpython,openCV,numpyなどを使いこなすことによって、いろいろなことができるようになりますね。
是非使いこなせるようになり、日々の業務を自動化していきましょう。
それではまた!!!
関連記事