この記事では以下の画像の白黒画像に対して、
各ピクセルの明るさ度合を表すレンジバー(Range Bar) を追加する方法をご紹介していきます。
あじけなかった最初の画像がすこしだけおしゃれになりましたね。
あなたのやりたいことと一致していれば、ぜひ続きをご覧ください。
それでは早速やっていきます!
※この作業をpythonというプログラミング言語を用いて実行していきます。
インストールしていない方はまずは以下からご覧ください。
必要なライブラリ
◆openCV
◆numpy
numpy はAnacondaを使用すればあらかじめインストールされていますが、openCVは自分で追加インストールが必要です。
openCVのインストール方法については以下をご覧ください。
Range Barを作る際の考え方
実際のコードの紹介に移る前に、どのようにしてレンジバーを作っていくかという考え方をご紹介しておきます。
基本的には、
①既存の画像の指定した領域をある輝度値で塗りつぶし、
②その横にその輝度値を文字として入力するという作業を、
③塗りつぶす領域、輝度値を変更しながら①②を繰り返す
④レンジバーの上に表しているもののタイトルを表示する
ということを行っていくだけです。
(かなりパワープレーです。探せばもっと簡単なやり方があるかも・・・)
いずれにせよ、考え方は理解できたと思いますので、次は実際のコーディングに移っていきましょう。
画像を合成するサンプルコード
以下が冒頭に紹介したようなレンジバーを追加するサンプルコードです。
※コードを実行するフォルダにmouse.jpgという名前で元画像を配置しています。
また、変更後の画像ファイルはadd_bar.jpgという名前で同じフォルダに出力されます。
◆pythonサンプルコード
#ライブラリインポート
import cv2
import numpy as np
#画像の読み込み
pic=cv2.imread('mouse.jpg', cv2.IMREAD_GRAYSCALE)
h,w=pic.shape[:2]
#位置、サイズ調整項目
margin_R=700
margin_B=500
size=20
#Rangebar作成
num_layer=8
for i in range(num_layer):
pic[(h-margin_B+i*size):(h-margin_B+size+i*size),w-margin_R:w-margin_R+size]=255-round(255/num_layer)*i
for i in range(num_layer+1):
cv2.putText(pic,
str(round(255-(255/num_layer*i))),#文字列
(w-margin_R+size+10,h-margin_B+(i*size)),#位置
cv2.FONT_HERSHEY_SIMPLEX,#フォント
0.5,#文字の大きさ調整
200,#文字の色
1)#文字の太さ調整
#タイトル作成
cv2.putText(pic,
'Brightness',#文字列
(w-margin_R,h-margin_B-size),#位置
cv2.FONT_HERSHEY_SIMPLEX,#フォント
0.5,#文字の大きさ調整
200,#文字の色
1)#文字の太さ調整
#画像の出力
cv2.imwrite('original.jpg',np.array(pic))
コードが長くて読むのが面倒かもしれませんが、やっていることは先ほど紹介したように非常にシンプルですので、ぜひ頑張って読んでみましょう。
(もしかしたらもっと簡単なやり方があるかもしれません。知っている方がいればコメント欄から教えてください。 )
なお、レンジバーを置く場所、大きさを変更したい場合は、以下を調整すればOKです。
margin_R=100
margin_B=200
size=20
また、今回は8bit画像の最大輝度が255であることを想定して書いています。
あなたの状況に応じて適宜修正してご活用ください。
おわりに
というわけで今回はpython-openCVを使って、画像の輝度値を表すレンジバーを追加する方法をご紹介しました。
あなたの業務に少しでもお役に立てていれば幸いです。
このように、私のブログでは様々なプログラミングスキルを紹介しています。
今は仕事中で時間がないかもしれませんが、ぜひ通勤時間中などに他の記事も読んでいただけると嬉しいです。
⇒興味をもった方は【ヒガサラ】で検索してみてください。
確実にスキルアップできるはずです。
最後に、この記事が役に立ったという方は、ぜひ応援よろしくお願いします。
↓ 応援ボタン
それではまた!
コメント