Pythonで写真を見やすくする方法を確認してみた
やってみようと思ったきっかけ
Pythonの画像処理ライブラリであるOpenCVを活用すると様々な画像処理ができるのですが、γ変換で画像の明るさを調整したり、ヒストグラム平坦化で画像のコントラストをはっきりさせる方法を再確認したいと思ったので。自分で撮影した画像やテスト画像をいろいろ加工してみたいと思います。
γ (ガンマ)補正
画像の明るさを変更する方法です。細かい数式は省略しますが、γが
1より大きくなると明るくなり、1を下回ると暗くなります。ちょっとやってみましょう。
#ライブラリのインポート
import cv2
import numpy as np
#γ変換のγ値
gamma = 2.0
#画像を読み込む
img = cv2.imread("airplane.jpg")
#ガンマ補正の計算式をgamma_cvtに代入
gamma_cvt = np.zeros((256, 1), dtype = 'uint8')
for i in range(256):
gamma_cvt[i][0] = 255 * (float(i) / 255) ** (1.0 / gamma)
#γ変換を行う
img_gamma = cv2.LUT(img, gamma_cvt)
#変換後の画像を表示する。
cv2.imshow("gamma", img_gamma)
cv2.waitKey(0)
cv2.destroyAllWindows()
全体的に明るくなりました。途中の計算式はやや難しいですが、LUT (ルックアップテーブル )へガンマ補正の計算式を渡すところがポイントですね→cv2.LUT(img, gamma_cvt)
ヒストグラム平坦化
次はヒストグラム平坦化(均一化)です。これはコントラストを調整ことで画像を見やすくする方法です。実際はグレースケールの画像で用いるため、日常はあまり使わないかもしれませんが、濃淡をはっきり出したいときなどは便利です。
ヒストグラムを描画する
#ライブラリのインポート
import cv2
import matplotlib.pyplot as plt
%matplotlib inline
plt.style.use("ggplot")
#画像の読み込み。第二引数を0に指定することでグレースケールに画像を変換する。
img = cv2.imread("Lena.jpg",0)
#ヒストグラムを表示
hist = cv2.calcHist([img],[0],None,[256],[0,256])
plt.plot(hist)
ヒストグラム平坦化を実行
#equalizeHistでヒストグラム平坦化を実行
img_equal = cv2.equalizeHist(img)
hist_equal = cv2.calcHist([img_equal],[0],None,[256],[0,256])
plt.plot(hist_equal)
実際に比較
#オリジナルの画像
cv2.imshow("img", img)
#ヒストグラム均一化後の画像
cv2.imshow("equal_img", img_equal)
cv2.waitKey(0)
cv2.destroyAllWindows()
結果
濃淡が強調され、画像はっきり見えるようになりましたね。なお、今回は下記の本を拝見して勉強させてもらいました。これ以外にも様々な手法が掲載されており、とても分かりやすかったです。
Pythonで始めるOpenCV入門
https://amzn.to/3qwE57d
参考サイト(公式サイト)
この記事が気に入ったらサポートをしてみませんか?