OpenCV でのいくつかの色空間変換

OpenCV では、cv2.COLOR_ は色空間変換を表すために使用される定数です。これらの定数は、画像処理で使用できるさまざまな色空間変換コードを定義します。

一般的に使用される cv2.COLOR_ 定数の一部を次に示します。

cv2.COLOR_BGR2GRAY: BGR カラー画像をグレースケール画像に変換します。
cv2.COLOR_BGR2RGB: BGR カラー イメージを RGB カラー イメージに変換します。
cv2.COLOR_BGR2HSV: BGR カラー イメージを HSV カラー スペースに変換します。
cv2.COLOR_BGR2Lab: BGR カラー イメージを Lab カラー スペースに変換します。
cv2.COLOR_RGB2GRAY: RGB カラー画像をグレースケール画像に変換します。
cv2.COLOR_RGB2BGR: RGB カラー画像を BGR カラー画像に変換します。
cv2.COLOR_RGB2HSV: RGB カラー イメージを HSV カラー スペースに変換します。
cv2.COLOR_RGB2Lab: RGB カラー イメージを Lab カラー スペースに変換します。
cv2.COLOR_GRAY2BGR: グレースケール画像を BGR カラー画像に変換します。
cv2.COLOR_GRAY2RGB: グレースケール画像を RGB カラー画像に変換します。
cv2.COLOR_HSV2BGR: HSV 色空間画像を BGR カラー画像に変換します。
cv2.COLOR_HSV2RGB: HSV 色空間画像を RGB カラー画像に変換します。

具体的な実装コードと原則は次のとおりです。

cv2.COLOR_BGR2GRAY
OpenCV で cv2.COLOR_BGR2GRAY を使用してカラー イメージをグレースケールに変換する場合、次のコードを使用できます。

import cv2
# 读取彩色图像
image = cv2.imread('color_image.jpg')
# 将彩色图像转换为灰度图像
gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
# 显示灰度图像
cv2.imshow('Gray Image', gray_image)
cv2.waitKey(0)
cv2.destroyAllWindows()

原理:
cv2.COLOR_BGR2GRAY を使用してカラー画像をグレースケール画像に変換する場合、明るさの知覚の原理に基づいて変換が実行されます。グレースケール イメージは、各ピクセルの値がピクセルの輝度値を表し、色情報を含まない単一チャネル イメージです。変換プロセス中、次の数式を使用して各ピクセルのグレー値が計算されます。
G ray = 0.299 × R + 0.587 × G + 0.114 × B グレー = 0.299\times R+0.587\times G+0.114\times Bグレー_ _ _=0.299×R+0.587×G+0.114×Bこの
式は、人間の目のさまざまな色の知覚重みに基づいています。これは、人間の目は緑に対してより敏感で、赤と青に対してはあまり敏感ではないためです。
具体的な手順は次のとおりです。
カラー画像を読み取ります。
画像の各ピクセルを反復処理します。
各ピクセルについて、グレースケール値は上記の式に従って計算されます。
計算されたグレースケール値を、グレースケール イメージの対応する位置のピクセルに割り当てます。
最終的なグレースケール イメージには、イメージの明るさの情報が含まれていますが、色の情報は削除されています。
このように、cv2.COLOR_BGR2GRAY を使用すると、カラー イメージをグレースケール イメージに変換し、イメージの明るさの特徴にさらに焦点を当てることができます。

cv2.COLOR_BGR2RGB
OpenCV を使用して画像を BGR 形式から RGB 形式に変換するサンプル コードを次に示します。

import cv2
# 读取图像
image_bgr = cv2.imread('input_image.jpg')
# 将图像从 BGR 格式转换为 RGB 格式
image_rgb = cv2.cvtColor(image_bgr, cv2.COLOR_BGR2RGB)
# 显示原始图像和转换后的图像
cv2.imshow('Original Image', image_bgr)
cv2.imshow('RGB Image', image_rgb)
cv2.waitKey(0)
cv2.destroyAllWindows()

原則:
OpenCV では、BGR (青、緑、赤) と RGB (赤、緑、青) が一般的に使用される 2 つの画像表現方法です。BGR は OpenCV のデフォルトの画像形式ですが、RGB は一般によく知られており、よく使用される画像形式です。
BGR から RGB への変換では、各ピクセルのカラー チャネルの順序が変更されます。つまり、元の画像の青チャネルが変更されます赤のチャンネル赤赤赤は交換を実行し、緑のチャネルを維持します。変わらず。画像を BGR 形式から RGB 形式に変換します。
変換の数式は次のとおりです。
R _ new = B 、 G _ new = G 、 B _ new = RR\_new = B,G\_new = G,B\_new = RR_新しい_ _ _=B G_新しい_ _ _=G B_新しい_ _ _=R
そのうち、R _ new = B 、 G _ new = G 、 B _ new = RR\_new = B、G\_new = G、B\_new = RR_新しい_ _ _=B G_新しい_ _ _=G B_新しい_ _ _=R は、変換された RGB 画像の赤、緑、青チャネルのピクセル値をそれぞれ表します。この変換により、RGB 形式の画像をより便利に処理できるようになります。これは、RGB 形式が人間の知覚や一般的に使用される色の表現とより一致しているためです。

cv2.COLOR_BGR2HSV
BGR 画像を HSV 画像に変換する場合、OpenCV の cv2.cvtColor() 関数を使用し、変換コードを cv2.COLOR_BGR2HSV に設定する必要があります。より詳細なコード例を次に示します。

import cv2
# 读取图像
bgr_image = cv2.imread('image.jpg')
# 将 BGR 图像转换为 HSV 图像
hsv_image = cv2.cvtColor(bgr_image, cv2.COLOR_BGR2HSV)
# 显示原始图像和转换后的图像
cv2.imshow('BGR Image', bgr_image)
cv2.imshow('HSV Image', hsv_image)
cv2.waitKey(0)
cv2.destroyAllWindows()

HSV は色空間であり、H は色相 hueを表しますh ue、S は彩度、彩度saturation,V代表亮度 v a l u e value value。这与BGR颜色空间不同,BGR颜色空间表示图像中的颜色是由蓝色 B l u e Blue Blue、绿色 G r e e n Green Green和红色 R e d Red Reddの組み合わせHSV 空間では、色の値は色相 (H)、彩度 (S)、明度 (V) の 3 つのパラメーターで表されます。HSV 空間は人間の色の認識とより一致しているため、一部の画像処理タスクでは、画像を HSV 空間に変換する方が合理的です。変換されたHSV画像のピクセル値の範囲が異なることに注意してください。H(色相)の値の範囲は[0,179]、S(彩度)とV(明度)の値の範囲は[0,255]です。したがって、変換された画像のピクセル値を取得または変更する場合は、これらの範囲の制限を考慮する必要があります。
原理:
HSV (色相、彩度、明度) は色空間であり、BGR (青、緑、赤) 色空間は、次の数式によって HSV 色空間に変換されます: 1. 正規化された RGB 値: BGR 画像を変換します
。各チャネルの値は 255 で除算され、各チャネルの値の範囲は [0, 1] の間になります。
R ' = R 255 、G ' = G / 255 、B ' = B / 255 R' = R255、G' = G /255、B' = B/255R=R255 _G=G /255 B=B /255
2. 最大値と最小値を計算します。正規化された RGB 値のM ax MaxMaxMin の最小M in
Max = max ( R ' , G ' , B ' ) , M in = min ( R ' , G ' , B ' ) Max = max(R', G', B'),Min = min( R'、G'、B')マックス_ _=マックス( R _「、G「、B__=私の( R「、G「、B' )
3. 色相 (H) を計算します:Max=Min で Max = M
の場合マックス_ _=M inの場合、色相H = 0 H=0H=0Max = R '
の場合マックス_ _=R',そしてG ' > = B ' G' >= B'G>=B'の場合、色相H = ( 60 ∗ ( G ' − B ' ) ) / ( Max − M in ) + 0 H= (60 * (G' - B')) / (Max - Min)+0H=( 60( GB' ))/(マックス_M)+0Max = R '
の場合マックス_ _=R',そしてG ' < B ' G' < B'G<B'の場合、色相H = ( 60 ∗ ( G ' − B ' ) ) / ( Max − M in ) + 360 H=(60 * (G' - B')) / (Max - Min) + 360H=( 60( GB' ))/(マックス_M)+360Max = G '
の場合マックス_ _=G'の場合、色相H = ( 60 ∗ ( B ' − R ' ) ) / ( Max − M in ) + 120 H=(60 * (B' - R')) / (Max - Min) + 120H=( 60( BR' ))/(マックス_M)+120Max = B '
の場合マックス_ _=B'の場合、色相H = ( 60 ∗ ( R ' − G ' ) ) / ( Max − M in ) + 240 H=(60 * (R' - G')) / (Max - Min) + 240H=( 60( RG' ))/(マックス_M)+240
ここでの色相Hの値の範囲は[0、360]である。
4. 彩度 (S) を計算します:Max = 0 Max=0
の場合マックス_ _=0の場合、彩度S = 0 S=0S=0
Max! = 0の場合Max!=0マックス_ _=0の場合、彩度S = ( Max − M in ) / Max S= (Max - Min) / MaxS=(マックス_ _M in ) / Max . _ _
ここでの彩度Sの値の範囲は[0,1]です。
5. 明るさ (V) を計算します。明るさ V は最大です。
ここでの明るさVの値の範囲は[0,1]です。
これらの式を使用すると、BGR 色空間のピクセル値を HSV 色空間の色相、彩度、明度の値に変換できます。これでBGRからHSVへの色空間変換が完了しました。

cv2.COLOR_BGR2Lab
OpenCV を使用して画像を BGR 色空間から Lab 色空間に変換するコードは次のとおりです。

import cv2
# 读取图像
image_bgr = cv2.imread('image.jpg')
# 将BGR图像转换为Lab图像
image_lab = cv2.cvtColor(image_bgr, cv2.COLOR_BGR2Lab)
# 显示原始图像和转换后的图像
cv2.imshow('BGR Image', image_bgr)
cv2.imshow('lab Image', image_lab)
cv2.waitKey(0)
cv2.destroyAllWindows()

Lab カラー スペースは、明るさ (L)、赤と緑のチャネル (a)、青と黄色のチャネル (b) の 3 つのコンポーネントを含むカラー モデルです。画像を BGR から Lab に変換することにより、色情報を輝度と色の 2 つの独立したチャネルに分離できるため、一部の画像処理タスクが容易になります。
画像を BGR 色空間から Lab 色空間に変換する原理には、複数の数式と変換行列が含まれます。以下は、このプロセスを数式で説明したものです。
まず、BGR 色空間の 3 つのチャネル (青、緑、赤) を [B、G、R] で示されるベクトルとして表します。
次に、次の式を通じて対応する線形変換を計算します:
X = R / 255.0 、 Y = G / 255.0 、 Z = B / 255.0バツ=R /255.0 Y=グラム/255.0 Z=B /255.0
ここで、X、Y、Z は RGB 色空間で正規化された値です。
次に、次の行列乗算を使用して、RGB 色空間を XYZ 色空間に変換します。

[ X ]     [ 0.412453  0.357580  0.180423 ]   [ R ]
[ Y ]  =  [ 0.212671  0.715160  0.072169 ] * [ G ]
[ Z ]     [ 0.019334  0.119193  0.950227 ]   [ B ]

このうち、左側の行列が変換行列、右側のベクトルがRGB正規化値です。
次に、次の式を使用して Lab 色空間の L、a、b 成分を計算します。

L = f(Y / Yn)
a = f((X / Xn) - (Y / Yn))
b = f((Y / Yn) - (Z / Zn))

これらの式は、正規化された XYZ 値を Lab 色空間の L、a、b 成分に変換するプロセスを説明します。
L成分は明るさを表します。式 L = f(Y / Yn) に従い、正規化された Y 値を Yn で除算し、変換関数 f を適用することで計算されます。変換関数 f は、明るさの知覚を調整するために使用される非線形関数です。通常、対数関数またはその他の適切なマッピングの形式をとります。
a コンポーネントは緑から赤までの範囲を表します。式 a = f((X / Xn) - (Y / Yn)) によれば、正規化された X 値を Xn で除算し、正規化された Y 値を Yn で除算し、両者の差を計算することによって計算されます。そして変換関数 f を適用してそれを取得します。この差は、基準白色点に対する赤色成分のオフセットを表します。
b 成分は青から黄色の範囲を表します。式 b = f((Y / Yn) - (Z / Zn)) に従って、正規化された Y 値を Yn で除算し、正規化された Z 値を Zn で除算し、両者の差を計算することによって計算されます。そして変換関数 f を適用してそれを取得します。この差は、基準白色点に対する黄色成分のオフセットを表します。
これらの式の Yn、Xn、Zn は Lab 色空間の白色点基準値であり、色空間変換の一貫性を確保するために XYZ 値を正規化するために使用されます。変換関数 f は、明るさと色度の知覚要件を満たすために、特定の色空間標準に従って選択できます。これらの式の具体的な実装は、関連するプログラミング ライブラリ (OpenCV など) の関数を通じて実現できます。

cv2.COLOR_GRAY2BGR
cv2.COLOR_GRAY2BGR は、グレースケール画像を BGR カラー画像に変換する色変換コードです。

import cv2
# 读取灰度图像
gray_image = cv2.imread('gray_image.jpg', cv2.IMREAD_GRAYSCALE)
# 将灰度图像转换为 BGR 彩色图像
bgr_image = cv2.cvtColor(gray_image, cv2.COLOR_GRAY2BGR)
# 显示 BGR 彩色图像
cv2.imshow('BGR Image', bgr_image)
cv2.waitKey(0)
cv2.destroyAllWindows()

cv2.COLOR_GRAY2BGR は、グレースケール イメージを BGR カラー イメージに変換する色変換です。この色変換を数式で説明すると次のとおりです。
入力グレースケール画像の画素値を G、BGR カラー画像の画素値を (B, G, R) とする。
グレースケール イメージにはチャネルが 1 つしかないため、BGR カラー イメージに変換する場合、各ピクセル値に B、G、および R コンポーネントと同じ値を割り当てる必要があります。したがって、変換プロセス中に G チャネルの値が B、G、および R チャネルにコピーされ、ピクセル値の一貫性が維持されます。
数式は次のとおりです。
B = G
G = G
R = G
これは、変換プロセス中、BGR カラー画像の各ピクセルの B、G、および R 値が、BGR カラー画像のピクセル値と等しいことを意味します。入力グレースケール画像。
この変換プロセスにより、グレースケール画像はカラー画像として表示されますが、各ピクセルの B、G、R 値が同じであるため、画像は色の効果のないグレースケールに見えます。
この変換は、グレースケール画像にカラーマーキングを行う場合、または画像処理中に画像をカラー形式に変換する必要がある場合によく使用されます。

cv2.COLOR_HSV2BGR

import cv2
import numpy as np
# 读取HSV彩色图像
hsv_image = cv2.imread('input_image.jpg', cv2.IMREAD_COLOR)
# 将HSV图像转换为BGR彩色图像
bgr_image = cv2.cvtColor(hsv_image, cv2.COLOR_HSV2BGR)
# 显示BGR彩色图像
cv2.imshow('BGR Image', bgr_image)
cv2.waitKey(0)
cv2.destroyAllWindows()

HSV (Hue-Saturation-Value) は一般的に使用される色表現方法であり、色相 (Hue)、彩度 (Saturation)、明度 (Value) がそれぞれ色の異なる属性を表します。BGR (青-緑-赤) は、コンピューターで一般的に使用されるカラー画像表現方法です。
cv2.COLOR_HSV2BGR 関数は、HSV イメージを BGR イメージに変換するために使用されます。具体的な変換プロセスは、次の数式で表すことができます。
HSV 画像の場合、H が色相、S が彩度、V が明度であると仮定します。対応する BGR イメージでは、B が青チャネル、G が緑チャネル、R が赤チャネルであると仮定します。
変換プロセス中に、HSV と BGR の間の正規化範囲とマッピング関係を考慮する必要があります。
正規化範囲:
Hの範囲は[0, 360]で、BGR画像の色相値として[0, 179]に変換されます。
S の範囲は [0, 1] で、変換は必要なく、BGR 画像の彩度値として直接使用されます。
V の範囲は [0, 1] で、変換は必要なく、BGR 画像の輝度値として直接使用されます。
マッピング関係:
H を BGR 画像の色相値に変換する場合、正規化されたマッピングが必要です。マッピング関係は、B = H * 2、G = H * 2 - 1、R = H * 2 - 2 です。このうち、B、G、R の範囲は [0, 255] です。
彩度と明るさは、[0, 255] の範囲の BGR 画像の対応するチャネル値として直接使用されます。
要約すると、 cv2.COLOR_HSV2BGR の原理は、上記の数式に従って HSV 画像の各ピクセルを変換し、対応する BGR 画像を取得することです。これにより、HSV から BGR への色空間変換が実現されます。

おすすめ

転載: blog.csdn.net/qq_50993557/article/details/130714267