0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Python】OpenCVを用いた画像処理

Last updated at Posted at 2025-05-24

色空間の変換

色空間の概要

色空間(color space)は立法的に記述される色の空間であり、RGB(Red Green Blue)やHSVなどがよく用いられます。HSVは色相(Hue)、彩度(Saturation)、明度(Value)の略です。

OpenCVにおける画像の読み込みと色空間の変換

下記のようなスクリプトを実行することでOpenCVを用いて画像の読み込みを行うことができます。

import cv2

image = cv2.imread('images/sample1.png')

print(type(image))

・実行結果

<class 'numpy.ndarray'>

上記より、cv2.imreadメソッドを用いて画像の読み込みを行う場合、読み込んだ結果がNumPy形式で保存されることが確認できます。この読み込んだ画像はBGR形式で表されますが、下記のようなコードを実行することでHSV形式に変換することができます。

image_hsv = cv2.cvtColor(image, cv2.COLOR_BGR2HSV)
print(type(image_hsv))

・実行結果

<class 'numpy.ndarray'>

大元の色空間がBGRであるので上記ではcv2.cvtColor(image, cv2.COLOR_BGR2HSV)のように指定することで色空間の変換を行います。HSVを用いる利点についてはたとえば下記のように明度のヒストグラム平坦化を行うことによって明度に偏りのある画像を見やすくすることが可能です。

・入力画像
sample2.png

import cv2
from matplotlib import pyplot as plt

image = cv2.imread('images/sample1.png')
image_hsv = cv2.cvtColor(image, cv2.COLOR_BGR2HSV)

equ = cv2.equalizeHist(image_hsv[:, :, 2])

new_hsv = cv2.merge((image_hsv[:, :, 0], image_hsv[:, :, 1], equ))
new_image = cv2.cvtColor(new_hsv, cv2.COLOR_HSV2BGR)

cv2.imwrite("results/output1.png", new_image)

・実行結果
output2.png

明度のヒストグラム平坦化による値の変化については下記のコードを実行することでヒストグラムに基づいて確認できます。

import cv2
from matplotlib import pyplot as plt

image = cv2.imread('images/sample2.png')
image_hsv = cv2.cvtColor(image, cv2.COLOR_BGR2HSV)

equ = cv2.equalizeHist(image_hsv[:, :, 2])
new_hsv = cv2.merge((image_hsv[:, :, 0], image_hsv[:, :, 1], equ))
new_image = cv2.cvtColor(new_hsv, cv2.COLOR_HSV2RGB)

fig, ax= plt.subplots(1, 2)

ax[0].hist(image_hsv[:,:,2])
ax[1].hist(new_hsv[:,:,2])
    
plt.savefig("results_hist.png")

・実行結果(左がヒストグラム平坦化前、右がヒストグラム平坦化後)
results_hist.png

実行結果より、ヒストグラム平坦化によって明度のヒストグラムが一様分布に近づいていることが確認できます。同様に標準偏差は下記のように計算できます。

import numpy as np
print(np.mean(image_hsv[:,:,2]), np.std(image_hsv[:,:,2]))
print(np.mean(new_hsv[:,:,2]), np.std(new_hsv[:,:,2]))

・実行結果

54.65961077064878 53.95692110666106
129.39104111111894 72.44996902502072

計算結果より、ヒストグラム平坦化後の方が標準偏差が大きくなっていることが確認できます。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?