Lab 색 공간 다루기

OpenCVBeginner
지금 연습하기

소개

OpenCV-Python 색 공간 (Colorspaces) 튜토리얼에 오신 것을 환영합니다!

색 공간은 이미지의 색상 채널을 표현하는 방법입니다. 여러 가지 색 공간이 있지만, 가장 일반적인 세 가지는 다음과 같습니다.

  • BGR (Blue, Green, Red): OpenCV 에서 사용하는 기본 색 공간입니다.
  • Gray: 이미지의 흑백 표현입니다.
  • HSV (Hue, Saturation, Value): 색상을 원통 좌표로 표현합니다.
    이 튜토리얼에서는 BGR, Gray, HSV 색 공간 간의 이미지 변환에 중점을 둘 것입니다.

cv.cvtColor() 함수를 사용하여 색 공간 간 이미지 변환 및 표시

색 공간 간에 이미지를 변환하려면 cv.cvtColor() 함수를 사용합니다. 먼저, 필요한 라이브러리를 가져오고 이미지를 읽어보겠습니다.

Python 셸 열기

터미널에서 다음 명령을 입력하여 Python 셸을 엽니다.

python3

cv.imread() 함수를 사용하여 기본 폴더에 준비된 image.jpg 이미지를 읽습니다.

import cv2 as cv
import numpy as np

## 이미지 읽기
image = cv.imread('image.jpg')

BGR 에서 Gray 로

이미지를 BGR 에서 Gray 로 변환하려면 cv.COLOR_BGR2GRAY 플래그를 사용합니다.

## 이미지를 흑백으로 변환
gray_image = cv.cvtColor(image, cv.COLOR_BGR2GRAY)

BGR 에서 HSV 로

이미지를 BGR 에서 HSV 로 변환하려면 cv.COLOR_BGR2HSV 플래그를 사용합니다.

## HSV 색 공간 사용. HSV 색 공간은 주로 객체 추적에 사용됩니다.
hsv_image = cv.cvtColor(image, cv.COLOR_BGR2HSV)

변환된 이미지 표시

원본 및 변환된 이미지를 표시하려면 cv.imwrite() 함수를 사용합니다.

## 이미지를 지정된 파일에 저장
cv.imwrite('image.jpg', image)
cv.imwrite('gray_image.jpg', gray_image)
cv.imwrite('hsv_image.jpg', hsv_image)

cv.inRange() 함수를 사용하여 이미지에서 특정 색상 객체 추출

이미지에서 특정 색상 객체를 추출하려면 cv.inRange() 함수를 사용할 수 있습니다. 이 예제에서는 이미지에서 파란색 객체를 추출합니다.

색상 범위 정의

먼저, HSV 색 공간에서 파란색의 하한 및 상한을 정의합니다.

## 파란색은 HSV 에서 360 도 중 약 240 도의 색조로 표현됩니다.
## OpenCV-HSV 의 색조 범위는 0-180 이며, 8 비트로 값을 저장합니다.
## 따라서 파란색은 OpenCV-HSV 에서 H 값이 약 240 / 2 = 120 으로 표현됩니다.
## 파란색을 올바르게 감지하려면 다음 값을 선택할 수 있습니다.
blue_lower = np.array([100, 150, 0], np.uint8)
blue_upper = np.array([140, 255, 255], np.uint8)

이미지 임계 처리

HSV 이미지에 임계값을 적용하여 파란색만 얻습니다.

## 파란색 마스크
blue_mask = cv.inRange(hsv_image, blue_lower, blue_upper)

마스크 적용

마스크를 원본 이미지에 적용하여 파란색 객체를 추출합니다.

## 마스크를 사용하여 파란색 객체 추출
blue_object = cv.bitwise_and(image, image, mask=blue_mask)

추출된 객체 표시

원본 이미지와 추출된 파란색 객체를 표시합니다.

## 이미지를 지정된 파일에 저장
cv.imwrite('blue_object.jpg', blue_object)

요약

이 튜토리얼에서는 OpenCV-Python 색 공간의 기본 사항을 다루었습니다. 이 지식을 통해 이제 다양한 색 공간으로 작업하고 이를 다양한 이미지 처리 작업에 적용할 수 있습니다. LAB 또는 YCrCb 와 같이 OpenCV 에서 지원하는 다른 색 공간도 실험해 볼 수 있습니다.