본문 바로가기

난 이 분야 전문가야!/OpenCV

컴퓨터비전인강 4주차 :: 영상에서 특정 색상 추출

Ch 03. 기본적인 영상 처리 기법 - 07. 특정 색상 영역 추출하기

Ch 03. 기본적인 영상 처리 기법 - 08. 히스토그램 역투영

Ch 05. 기하학적 변환 - 01. 영상의 이동 변환과 전단 변환

 

 

오늘은 영상에서 특정 색상을 검출해 내는 방법과

영상의 변환에 대해서 공부해 보았습니다.

현재 AR 관한 프로젝트를 같이 진행하고 있는 사람으로서 영상의 변환 행렬 계산 쪽을

더 빨리 공부하고 싶다는 생각으로 ch4를 건너뛰게 됐네요..ㅎㅎ

 

 

RGB 색 공간에서 색 추출하기

mask 영상: 특정 부분(목표)을 흰색으로 나머지를 검은색으로 하는 이진 영상

 

RGB 색공간에서 녹색 추출하기

          0 < R < 100

       128 < G < 255

         0 <  B < 100

위의 영역만을 잡아 낸다면 녹색을 띠는 부분을 잡을 수 있음

하지만 특정 색을 검출할 때 RGB 값을 사용하여 검출하지 않고

hsv, YCrCb 등의 색 공간을 이용한다.

 

hsv 색공간에서 녹색 검출하기

        50 < H < 80

       150 < S < 255

          0 < V < 255 

 

색공간의 특정 범위를 나눠주는 함수

cv2.inRange(src, lowerb, upperb, dst=None) -> dst

 

lowerb와 upperb 에는 하한 값과 상한 값의 ndarray 혹은 스칼라 값을 넘겨준다.

mask 영상 반환.

 

rgb ex) cv2.inRange(src, (0, 128, 0), (100, 255, 100))  *bgr 순서임을 유의하자

hsv ex) cv2.inRange(src, (50, 150, 0), (80, 255, 255))

 

hsv 색공간을 사용하여 빨간색을 추출할 경우에는

빨간 부분을 나타내는 영역이 hsv 색공간에서 원 각도로 따지면

0 º 에서 15 º 그리고 345 º에서 360 º 정도 이기 때문에 or 연산자를 사용해줘야 한다.

 

 

히스토그램 역투영

 

영상의 각 픽셀이 주어진 히스토그램 모델에 얼마나 일치하는지를 검사하는 방법

임의의 색상 영역을 검출할 때 효과적

 

hsv는 주로 어떤 색상을 Hue값으로 표현하기 쉬울 때 (빨강, 파랑, 초록 등) 주로 사용되고

어떤 임의의 값을 알아내고 싶을 때 (살색 등) 주로 YCrCb 색공간이 사용된다.  (Lab 색공간 자주 사용)

 

calcBackProject(images, channels, hist, ranges, scale, dst=None) -> dst

channels: 역투영 계산에 사용할 채널 번호 리스트

hist: 입력 히스토그램   (cv2.calcHist() 함수로 만들어진 히스토그램 입력)

ranges: 히스토그램 각 차원의 최솟값과 최댓값으로 구성된 리스트

scale: 출력 역투영에 추가적으로 곱해줄 값

 

 

영상의 기하학적 변환

 

영상을 구성하는 픽셀의 배치 구조를 변경함으로써 전체 영상의 모양을 바꾸는 작업

변환의 종류: translation, Euclidean, similarity, affine, projective

 

 

이동 변환(Translation transformation)

가로 또는 세로 방향으로 영상을 특정 크기만큼 이동시키는 변환

x' = x + a

y' = y + b

행렬의 곱으로 표현한 모습

 

영상의 affine 변환 함수

cv2.warpAffine(src, M, dsize) -> dst

 

M: 2 x 3 affine 변환 행렬. (실수형)

     np.array([[1, 0, a], [0, 1, b]], dtype=np.float32) 으로 데이터 타입을 실수형으로 변환시켜줘야 함

dsize: 경과 영상 크기. (w, h) 튜플. (0, 0)이면 src와 같은 크기로 설정

 

전단 변환(Shear transformation)

x방향 혹은 y방향으로 찌그러트림

 

 

 

 

 

강의 링크 및 사진출처: bit.ly/2NTHHz7

728x90