OpenCV-Python 색상정보활용법(1)

Yk Lee·2022년 5월 15일
0

AI영상인식실습

목록 보기
4/16

색상기반영상인식

영상 인식의 어려움
동일한 사물이라도 환경 및 조건에 따라 매우 다른 이미지로 측정된다.
날씨에 따라 영상이 달라지고 동일한 조건이라 해도 화이트 밸런스에 의해 색이 변하기도 한다.

다양한 색상 모델을 활용하여 이에 대처한다.
크게 두가지로 나뉘는데
1. 색상 정보를 무시하고, 발기 정보만 사용함
2. 밝기 정보는 무시하고, 색상 정보만 사용함<보통 더 현실적임>

Gray모델
색상 기반 인식에서 일반적으로 많이 활용하지는 않는다.
밝기 정보나 있으나 밝기는 주변환경에 따라 변화가 많은 값으로 불리하다.

RGB모델
색상과 밝기를 동시에 표현하기 때문에 일반적으로는 활용이 쉽지않다.
직관적이기는하나 알고리즘에서 활용하기가 어렵다.

HIS(HSV)모델,YCbCr(YUV)모델

다만 어두운 이미지의 경우 색상 값이 불안정해질수 있어 상황에 맞는 활용이 필요하다.

예제

이미지에서 Red, Green, Blue 색상 이미지를 OpenCV-Python을 활용하여 구분하기
접근방법: 어떤 색 모델을 쓰는 것이 적당할 것인가?

색상별로 구분해야한다.
Gray모델
색상을 표현하지 못하는 Gray모델은 제외한다. 이미지 색상 종류는 비교적 명확하나, 색상이 발고 어둡거나 진하고 연한 차이가 존재함.
RGB모델
색상과 밝기를 동시에 표현하여 적합하지 않음(가능은하나 난이도가 높음)
HIS(HSV)모델,YCbCr(YUV)모델
색상과 밝기가 구분되어 표현되기에 이 두 모델이 적합하다.
다만 정확한것인지는 직접 해봐야 한다.

OpenCV-Python 예제 풀이해보기

<주위!> 색상 이미지는 코드가 저장된 파일에 있어야한다.

import cv2
import numpy as np

#img에 저장된다.
#BGR순서로 이미지를 저장된다.
img = cv2.imread('2c_original.jpg')

# BGR 을 HSV 로 변경
img_hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)

# blue 색상의 이미지를 추출한다.
th_blue_low = np.array([95, 50, 70])
th_blue_up = np.array([135, 255, 255])

#img_hsv파일에서 Low와 up 사이에 위치한 mask(픽셀정보)를 뽑아준다.
mask_blue_img = cv2.inRange(img_hsv, th_blue_low, th_blue_up)

img_blue = cv2.bitwise_and(img, img, mask=mask_blue_img)

cv2.imshow("BGR",img)
cv2.imshow('MASK (BLUE)',img_blue)

cv2.waitKey(0)
cv2.destroyAllWindows()

결과

초록색 이미지 구분하기

import cv2
import numpy as np

img = cv2.imread('2c_original.jpg')

# BGR 을 HSV 로 변경
img_hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)

th_green_low = np.array([50, 100, 100])
th_green_up = np.array([90, 255, 255])

mask_green_img = cv2.inRange(img_hsv, th_green_low, th_green_up)

img_green = cv2.bitwise_and(img, img, mask=mask_green_img)

cv2.imshow("BGR",img)
cv2.imshow('MASK (GREEN)',img_green)

cv2.waitKey(0)
cv2.destroyAllWindows()

결과

profile
AR개발자지망생

0개의 댓글