Color Space란 무엇인가요?
Color Space(색상 공간)는 색을 수학적으로 표현하는 방법이에요.
OpenCV에서는 기본적으로 이미지를 BGR(Blue, Green, Red) 순서로 표현합니다.
하지만 색상 기반 작업을 할 때는 HSV(Hue, Saturation, Value)로 변환해서 사용하는 게 일반적이에요.
왜냐하면 HSV는 사람이 인식하는 색상 방식과 비슷하게 동작해서
특정 색을 정밀하게 추출하거나 밝기와 색조를 분리해서 처리하는 데 유리하거든요.
BGR ↔ HSV 변환 방법
OpenCV에서는 cv::cvtColor() 함수를 사용해서 손쉽게 색상 공간을 변환할 수 있어요.
가장 많이 쓰이는 건 BGR ↔ HSV 변환이죠.
cv::Mat bgr = cv::imread("image.jpg"); cv::Mat hsv; cv::cvtColor(bgr, hsv, cv::COLOR_BGR2HSV); // BGR → HSV cv::Mat bgr_back; cv::cvtColor(hsv, bgr_back, cv::COLOR_HSV2BGR); // HSV → BGR |
cv::COLOR_XXX2YYY는 변환 방향을 지정하는 상수고,
이외에도 BGR ↔ GRAY, BGR ↔ Lab, BGR ↔ YCrCb 등 다양한 변환도 가능합니다.
HSV를 사용하는 이유: 색상 분리의 강점
HSV는 색상(H), 채도(S), 밝기(V)를 따로 다루기 때문에 BGR보다 색상 추출에 훨씬 유리해요.
예를 들어, 빨간색 계열만 추출하고 싶을 때, BGR에서는 값이 섞여서 어렵지만
HSV에서는 Hue 값(0~180)만 기준으로 쉽게 필터링할 수 있어요.
cv::Scalar lower_red(0, 100, 100); cv::Scalar upper_red(10, 255, 255); cv::Mat mask; cv::inRange(hsv, lower_red, upper_red, mask); // 빨간색 영역 추출 |
이렇게 색상 범위를 설정해 추출한 마스크는 객체 추적, 영역 분할, 배경 제거 등 다양한 응용에 활용돼요.
색상 공간 변환 시 주의할 점
HSV 변환 시 가장 주의할 점은 Hue 값의 범위가 0~180이라는 거예요.
OpenCV는 8비트 이미지 기준으로 H 값을 0~180으로 스케일링해서 표현하니까
일반적인 360도 기준과 다르게 생각해야 해요.
또한, 밝기 변화가 심한 이미지에서는 Value(V)에 따라 색 추출이 실패할 수 있으니,
S/V 범위를 조절하거나 추가 보정을 해주는 게 좋아요.
실전에서는 HSV 외에도 Lab, YCrCb, GRAY 등의 색공간도 함께 고려해보면 훨씬 정밀한 처리가 가능해요.
HSV 색상 공간에서 색상 기반 추출의 정밀도 높이기
HSV 색상 공간에서 색상 기반 추출의 정밀도를 높이려면 H, S, V 각각의 범위를 상황에 맞게 조절하는 게 핵심이에요.
- H (Hue)는 색상의 종류를 결정하는 값으로, OpenCV에서는 0부터 179까지의 정수 값으로 표현돼요. 추출하고자 하는 색상에 따라 아래와 같이 범위를 설정할 수 있어요:
- 빨간색: 0~10 또는 170~179 (두 구간으로 나뉘기 때문에 두 개의 마스크를 합쳐야 해요)
- 주황색: 11~25
- 노란색: 26~34
- 초록색: 35~85
- 하늘색(Cyan): 86~100
- 파란색: 101~130
- 보라색: 131~160
- S (Saturation)는 색의 선명도를 의미해요. 색이 뚜렷하지 않은 흐린 경우(예: 빛바랜 색)는 S 값을 낮게 잡아야 추출이 잘 돼요. 반면 강한 색을 추출할 땐 100~255처럼 높게 설정해요.
- V (Value)는 밝기인데, 조명이 어둡거나 그림자가 진 영역도 포함하고 싶다면 V의 하한값을 50 이하로 낮추는 식으로 조정하면 좋아요.
실전에서는 트랙바 UI로 H, S, V 범위를 조정하면서 실시간으로 결과를 확인하는 방식이 매우 효과적이에요.
이 과정을 통해 정확하고 안정적인 색 추출 마스크를 얻을 수 있어요.
위 내용을 정리한 대화 내용을 들으면 더욱 이해가 쉬울거예요.
'IT' 카테고리의 다른 글
OpenCV Mat 클래스 구조와 메모리 이해 (0) | 2025.06.24 |
---|---|
OpenCV Scalar 클래스 활용법! (0) | 2025.06.24 |
OpenCV Rect 클래스 완전 정복 (0) | 2025.06.24 |
OpenCV Size_ 클래스 (0) | 2023.05.18 |
OpenCV 개발툴 - Visual Studio 2019 (0) | 2023.05.17 |