OpenCV를 사용하여 이미지를 YUV로 변환
YUV는 RGB 및 BGR 이미지 형식과 유사한 색상 모델입니다. YUV에서 구성 요소(Y
)는 이미지의 휘도(밝기)를 정의하고 크로미넌스 구성 요소(U
) 및 (V
)라고도 하는 다른 두 구성 요소는 파란색 프로젝션을 정의하고 각각 빨간색 프로젝션.
이 기사에서는 YUV가 무엇이며 OpenCV를 사용하여 이미지에 YUV 색상 모델을 구현하는 방법을 살펴봅니다.
OpenCV를 사용한 이미지의 YUV 색상 모델
YUV는 인간의 인식과 관련된 컬러 이미지 또는 비디오를 인코딩하고 “직접” RGB 표현과 비교하여 색차 구성 요소에 대한 감소된 대역폭을 허용합니다. 컬러 이미지 파이프라인의 일부로 일반적으로 사용되는 모델입니다.
역사적으로 YUV 및 Y’UV라는 용어는 텔레비전 시스템에서 색상 정보의 특정 아날로그 인코딩에 사용되었습니다.
초기 단계에서 아날로그 텔레비전은 YUV 색 공간을 사용하여 그레이스케일 이미지/비디오를 생성했습니다. 이러한 아날로그 TV는 화면에 흑백 이미지/비디오를 생성하기 위해 YUV의 U 및 V 구성 요소를 제거하는 데 사용됩니다.
U 및 V의 값 범위는 -128
에서 +127
(부호 있는 정수의 경우) 및 0
에서 +255
(부호 없는 정수의 경우)입니다.
U 및 V 구성 요소를 제거하면 회색조 이미지를 얻게 됩니다. U와 V는 색상 행렬입니다.
이제 구문을 살펴보고 몇 가지 예를 살펴보겠습니다.
통사론:
cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
매개변수:
img
- 변환할 이미지가img
변수에 저장됩니다.cv2.COLOR_BGR2RGB
- BGR 이미지가 RGB 이미지로 변환됩니다.cv2.COLOR_RGB2YUV
- RGB 이미지가 YUV 이미지로 변환됩니다.
구문을 살펴보았으므로 OpenCV에서 어떻게 작동하고 구현되는지 살펴보겠습니다.
OpenCV를 사용할 때 좋은 점은 컴퓨터 비전 및 이미지 처리 응용 프로그램을 위해 특별히 설계되었기 때문에 이미지에 대한 다양한 처리를 수행하는 데 좋습니다.
아래 예제를 통해 OpenCV에서 YUV를 사용하는 방법을 알아보겠습니다.
먼저 OpenCV 모듈을 가져와 imread()
함수를 사용하여 이미지를 로드하고 img
라는 변수에 저장해야 합니다. 이 예에서는 jpg
형식의 자동차 이미지를 촬영했습니다.
코드 조각:
# Import opencv library
import cv2 as cv
# Load the image into a variable using the imread function.
img = cv.imread("car.png")
# Converting the image from BGR to RGB since OpenCV generally uses BGR image format.
img_rgb = cv.cvtColor(img, cv.COLOR_BGR2RGB)
# Now converting the image from RGB to YUV
img_yuv = cv.cvtColor(img_rgb, cv.COLOR_RGB2YUV)
# Showing all the images
cv.imshow("RGB Image", img_rgb)
cv.imshow("YUV Image", img_yuv)
cv.imshow("Original Image", img)
cv.waitKey(0)
cv.destroyAllWindows()
그런 다음 cv.cvtcolor()
메서드를 사용하여 이미지를 변환하여 이미지의 색상을 여러 매개변수로 변경합니다. OpenCV는 이미지에 BGR 형식을 사용하므로 이 형식을 다른 형식으로 변환해야 합니다.
이제 cv.COLOR_BGR2RGB
를 cv.cvtcolor()
메서드의 두 번째 매개변수에 전달하여 원본 이미지를 BGR에서 RGB 형식으로 변환합니다. 이미지를 YUV로 변환하려면 cv.COLOR_RGB2YUV
매개변수를 cv.cvtcolor()
메서드에 전달하여 이미지를 RGB 형식에서 YUV로 변경합니다.
여기에서 cv.COLOR_BGR2YUV
매개변수를 전달하여 BGR 이미지에서 YUV로 직접 변환할 수도 있습니다. 우리는 RGB와 YUV를 더 잘 이해하기 위해 먼 길을 가고 있습니다.
자세한 내용은 공식 문서를 참조하십시오.
마지막으로 imshow()
함수를 사용하여 화면에 모든 이미지를 표시합니다.
출력:
결론
앞에서 언급했듯이 RGB의 문제점은 시각적 인식을 매핑하는 데 끔찍하지만 YUV는 이러한 목적을 위해 RGB보다 효율적입니다. 이것이 바로 중요한 구성 요소인 휘도 때문에 YUV를 사용하는 이유입니다.
따라서 위의 방법을 사용하여 이미지를 YUV로 변환하고 OpenCV를 사용하거나 사용하지 않고 다시 변환할 수 있습니다.
Sahil is a full-stack developer who loves to build software. He likes to share his knowledge by writing technical articles and helping clients by working with them as freelance software engineer and technical writer on Upwork.
LinkedIn