この記事では以下の画像のように、2枚の画像の輝度を割り算した画像を作成する方法をご紹介していきます。
※割り算すると輝度数値が小さくなるので輝度値を50倍しています。
うまく調整すれば、上の画像のようにかっこいい感じの画像を作成することができるはずです。
ぜひあなたも何かの画像を使って一緒にやってみましょう。
それでは早速やっていきます!
※pythonというプログラミング言語を用いて実行していきます。
インストールしていない方はまずは以下からご覧ください。
必要なライブラリ
◆openCV:Ver.4.5.1.48
◆numpy:Ver.1.19.5
バージョンは参考情報です。
おそらくバージョンが違っても動作するはずです。
numpy はAnacondaを使用すればあらかじめインストールされていますが、openCVは自分で追加インストールが必要です。
openCVのインストール方法については以下で紹介しています。
画像輝度の割り算画像を作成する方法
下準備が整ったところで、早速コードを記述していきましょう。
以下が2枚の画像輝度の割り算画像を作成するサンプルコードです。
※今回は割られる方の画像の名前をpic1.jpg、割る方の画像の名前をpic2.jpgという名前で保存されている状態を想定しています。
また、読み込む画像は白黒画像で実行していきます。
#ライブラリインポート
import cv2
import numpy as np
#画像読み込み
pic1=cv2.imread('pic1.jpg',cv2.IMREAD_GRAYSCALE)
pic1=np.where(pic1==0,1,pic1)
pic2=cv2.imread('pic2.jpg',cv2.IMREAD_GRAYSCALE)
pic2=np.where(pic2==0,1,pic2)
#輝度の割り算
pic3=pic1/pic2
#輝度調整
pic3=pic3*50
pic3=pic3.astype(np.uint8)
#画像出力
cv2.imwrite('pic3.jpg', pic3)
輝度の割り算を行うにあたって、重要な項目が2つありますので、それらを詳細解説しておこうと思います。
◆コードのポイント解説:ゼロ割を避けるために1足しておく
当たり前ですが、割り算をする際は0で割ってしまうと答えは無限大になってしまいます。
輝度が0というのはなかなかないとは思いますが、念のためゼロが入っている場所には1を足しておく方が良いでしょう。
今回のコードでは、以下でその処理を行っています。
pic1=np.where(pic1==0,1,pic1)
pic2=np.where(pic2==0,1,pic2)
◆コードのポイント解説②割り算結果に係数掛け
割り算をすると全体的に数値が非常に小さくなってしまいます。
たとえば輝度200の部分を輝度100で割ると2になります。
もとの画像では輝度に100もの差がありましたが、割り算後だとほとんどゼロになってしまいます。
これでは割り算後の数値を画像にしてもほとんど真っ黒になってしまいます。
そのため、ある程度の数値を掛けて画像化したときにキチンと絵になるように調整する必要があります。
今回のコードでは、以下でその処理を行っています。
pic3=pic3*50
※ここは何度もコードを実行しながらいい感じの数値を探す必要がありますね。
サンプルコードの実行結果
というわけで最後に先ほど紹介したサンプルコードを実行してみましょう。
※実行前にコードを記述したファイルと同じフォルダに画像が入っていることを確認しておきましょう。
プログラムを実行した結果、以下の画像のようにもとの2枚の画像輝度を割り算した画像が作成されていることが確認できました。
ただのマウスの写真が、宇宙空間っぽくなりましたね。
画像処理はおもしろいですね~。
おわりに
というわけで今回はpythonを使って、2枚の画像輝度の割り算画像を作成する方法をご紹介しました。
光学計測なんかをしていると、このような画像を作成するニーズはあると思いますので、そのような状況に出くわした際はぜひご活用ください。
このように、私のブログでは様々なプログラミングスキルを紹介しています。
今は仕事中で時間がないかもしれませんが、ぜひ通勤時間中などに他の記事も読んでいただけると嬉しいです。
⇒興味をもった方は【ヒガサラ】で検索してみてください。
確実にスキルアップできるはずです。
最後に、この記事が役に立ったという方は、ぜひ応援よろしくお願いします。
↓ 応援ボタン
それではまた!
コメント