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 Gray= 0.299\times R+0.587\times G+0.114\times B그레이 _ _ _=0.299×아르 자형+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(빨간색, 녹색, 파란색)가 일반적으로 사용되는 두 가지 이미지 표현 방법입니다. BGR은 OpenCV의 기본 이미지 형식인 반면, RGB는 사람들에게 일반적으로 더 익숙하고 일반적으로 사용되는 이미지 형식입니다.
BGR에서 RGB로 변환하면 각 픽셀의 색상 채널 순서가 변경됩니다. 즉, 원본 이미지의 파란색 채널이 파란색 파란색입니다 .파란색 빨간색 채널R ed RedRed는 교환을 수행하고 Green 채널을 유지합니다. Green Green녹색 변경되지 않습니다 . 이미지를 BGR 형식에서 RGB 형식으로 변환합니다.
변환을 위한 수학 공식은 다음과 같습니다:
R _ new = B , G _ new = G , B _ new = RR\_new = B,G\_new = G,B\_new = RR_ _ _ _=,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 Hue를 의미하는 색공간입니다.h u e , S는 채도채도를s a t ur a t i o n , V는 밝기값 값을 나타냅니다 .v a l u e . 이는 BGR 색공간과는 다르며, 이는 이미지의 색상이 파란색파란색B l u e、그린그린그린녹색 빨간색Red 빨간색Red 조합 . HSV 공간에서 색상 값은 색상(H), 채도(S), 밝기(V)의 세 가지 매개변수로 표현됩니다. HSV 공간은 인간의 색상 인식과 더 일치하므로 일부 이미지 처리 작업에서는 이미지를 HSV 공간으로 변환하는 것이 더 합리적입니다. 변환된 HSV 이미지의 픽셀 값 범위가 다르다는 점에 유의하세요. H(색조)의 값 범위는 [0, 179]이고, S(채도)와 V(명도)의 값 범위는 [0, 255]입니다. 따라서 변환된 이미지의 픽셀 값을 얻거나 수정하려면 이러한 범위의 제한을 고려해야 합니다.
원리:
HSV(색조, 채도, 밝기)는 색공간이며, BGR(파란색, 녹색, 빨간색) 색공간은 다음 수학식을 통해 HSV 색공간으로 변환됩니다. 1. 정규화된 RGB 값: BGR 이미지를 변환합니다
. 각 채널의 값은 255로 나누어지므로 각 채널의 값 범위는 [0, 1] 사이가 됩니다.
R' = R255 , G' = G/255 , B' = B/255 R' = R255,G' = G /255,B' = B/255아르 자형=R 255 ,G=G /255 ,=B /255
2. 최대값과 최소값 계산 : 정규화된 RGB 값 중M ax Max 를M a x 및 최소값M(Min)M in
M ax = max ( R ′ , G ′ , B ′ ) , M in = min ( R ′ , G ′ , B ′ ) Max = max(R', G', B'), Min = min( R', G', B')최대 _ _=최대 x ( R ,G ,' ),M in=( R ,G , )
3. 색상(H) 계산:Max = M in Max=Min
인 경우최대 _ _=M in 이면 색상H = 0 H=0시간=0 .
만약Max = R ′ Max=R'최대 _ _=아르 자형,且G ′ > = B ′ G' >= B'G>= 이면 색상H = ( 60 * ( G ′ − B ′ ) ) / ( M ax − M in ) + 0 H= (60 * (G' - B')) / (Max - Min)+0시간=( 60*( - ))/(Max-) _+0 .
만약Max = R ′ Max=R'최대 _ _=아르 자형,且G ′ < B ′ G' < B'G< 이면 색상H = ( 60 * ( G ′ − B ′ ) ) / ( M ax − M in ) + 360 H=(60 * (G' - B')) / (Max - Min) + 360시간=( 60*( - ))/(Max-) _+360 .
만약Max = G ′ Max=G'최대 _ _=G 이면 색상H = ( 60 * ( B ′ − R ′ ) ) / ( M ax − M in ) + 120 H=(60 * (B' - R')) / (Max - Min) + 120시간=( 60*( -아르 자형 ))/(Max-) _+120 .
만약Max = B ′ Max=B'최대 _ _= 이면 색상H = ( 60 * ( R ′ − G ′ ) ) / ( M ax − M in ) + 240 H=(60 * (R' - G')) / (Max - Min) + 240시간=( 60*( R-G ))/(Max-) _+240 .
여기서 색상 H의 값 범위는 [0, 360]입니다.
4. 채도(S) 계산:Max = 0 Max=0
인 경우최대 _ _=0 이면 채도S = 0 S=0에스=0 .
최대!=0 인 경우최대!=0엑스 ! _=0 이면 채도S = ( M ax − M in ) / M ax S= (Max - Min) / Max에스=( 최대 x _-M in ) / M a x .
여기서 포화 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)의 세 가지 구성 요소를 포함하는 색상 모델입니다. 이미지를 BGR에서 Lab으로 변환하면 색상 정보가 밝기와 색상의 두 개의 독립적인 채널로 분리될 수 있어 일부 이미지 처리 작업이 용이해집니다.
이미지를 BGR 색상 공간에서 Lab 색상 공간으로 변환하는 원리에는 여러 수학 공식과 변환 행렬이 필요합니다. 다음은 이 프로세스에 대한 수학적 공식 설명입니다.
먼저 BGR 색 공간의 세 채널(파란색, 녹색, 빨간색)을 [B, G, R]로 표시된 벡터로 나타냅니다.
그런 다음 다음 공식을 통해 해당 선형 변환을 계산합니다.
X = R / 255.0 , Y = G / 255.0 , Z = B / 255.0엑스=R /255.0 ,와이=G /255.0 ,=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)이라고 가정합니다.
회색조 이미지에는 채널이 하나뿐이므로 BGR 컬러 이미지로 변환할 때 각 픽셀 값에는 B, G, R 구성 요소와 동일한 값이 할당되어야 합니다. 따라서 변환 과정에서 G 채널의 값이 B, G, R 채널에 복사되어 픽셀 값의 일관성을 유지합니다.
수학 공식은 다음과 같습니다:
B = G
G = G
R = G
이는 변환 과정에서 BGR 컬러 이미지의 각 픽셀의 B, G 및 R 값이 의 픽셀 값과 동일하다는 것을 의미합니다. 입력 회색조 이미지.
이러한 변환 과정을 통해 회색조 이미지가 컬러 이미지로 나타날 수 있지만, 각 픽셀의 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(Blue-Green-Red)은 컴퓨터에서 일반적으로 사용되는 컬러 이미지 표현 방식입니다.
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