画像解析を行う際に、画像の輝度(明るさの度合い)分布を出力したい。
この記事ではこんな悩みを解決する方法をご紹介します。
具体的にはpythonというプログラミング言語を使い、openCVというライブラリを操作することで実行していきます。
※pythonもopenCVも、様々な分野で活用されているツールです。
インストール方法から知りたい方はまずは以下からご覧ください。
それでは早速やっていきます!
実行環境
まず始めに私の実行環境をご紹介しておきます。
〇python 3.7,6
〇openCV 4.2.0
〇Intel CPU
〇Windows10
基本的にpythonとopenCVがインストールされてさえいれば、この記事のプログラムは動くはずですが、万が一動かなかった場合は、実行環境の違いが原因である可能性もありますので、そこはご了承ください。
事前準備:サンプル画像を用意
今回紹介するのは、画像の輝度分布を出力するものですので、まずは画像がないと始まりません。
今回は出力結果がわかりやすい、以下の画像を用いて行います。
※基本的には、カラー画像でも、白黒画像でもなんでも対応できますので、適当な画像を準備しておきましょう。
◆補足説明
画像の輝度は0から255までの数字を用いて表されます。
(0が真っ黒、255が真っ白です。)
そのため、上の画像の輝度分布を出力すると、斜めに255(くらい)の数字がある一定の間隔で出力されるはずです。
(今回は2本の線があるので、2つの領域に分かれて出力されるはずです。)
一方それ以外の領域は真っ黒ですので、0(くらい)の数字が出力されるはずです。
このあたりは結果を見ればイメージしやすいのでぜひ読み進めてみてください。
画像の輝度分布を出力するコード
早速ですが、画像の輝度分布を出力するコードをご紹介します。
今回のサンプルコードでは、
輝度出力したい画像の名前をkido.jpg
輝度分布を出力するテキストファイルの名前をkido_bunpu.txt
という名前に設定しています。
これらのファイル名はあなたの状況に応じて、適宜変更してください。
◆輝度分布を出力するサンプルコード
#ライブラリのインポート
import cv2
import numpy as np
#画像の読み込み
img = cv2.imread('kido.jpg', cv2.IMREAD_GRAYSCALE)
height, width = img.shape[:2]
#輝度出力用のテキストを開く
file = open('kido_bunpu.txt', 'w')
#輝度分布を出力していく
for i in range(height):
y=img[i,:]
for j in range(width):
file.write(str(y[j])+"\t")
file.write("\n")
#輝度出力用のテキストを閉じる
file.close()
◆コードのポイント解説
基本的には画像を輝度の配列にし、その配列のひとつひとつの要素をテキストファイルに出力していっているだけです。
とはいえ、python初心者には少し難しい内容だとは思いますので、まずはネットで
【python 配列】、【python numpy 使い方】などと検索し、pyhon上での配列の概念や処理方法を勉強してみましょう。
その辺の概念が理解できていれば、今回紹介した内容は非常に簡単だということがわかると思います。
サンプルコードの実行結果
最後に先ほど紹介したサンプルコードを実行してみましょう。
実行する前に、準備した画像をpythonのプログラムコードを保存しているフォルダと同じフォルダに保存することをお忘れなく。
先ほど紹介した画像を出力すると・・・
(以下が今回使った画像です。)
以下のように斜めに255(くらい)の数値が2つの領域に分かれて並んでいます。
きちんと上の画像の輝度分布が出力できているみたいですね。
おわりに
というわけで今回はopenCVとpythonを使って、画像の輝度分布を出力する方法についてご紹介しました。
画像解析をする際には役立つと思いますので、ぜひブックマークしておいていただけると嬉しいです!
このように私のブログでは様々なプログラミングスキルを紹介しています。
・もっと革新的なことをやりたい。
・プログラミングについてもっと詳しくなりたい。
こんな思いを持っている人は、ぜひ他の記事も見てみてくださいね。
この記事が役に立ったという方は、ぜひ応援よろしくお願いします。
↓ 応援ボタン
それではまた!
コメント