[참고]

 

1. Color Image

  • Color Image는 pixel 당 24 bit 사용 (총 16,777,216가지 색 표현 가능). 일반적으로 True color image라고 함.
  • pixel은 RGB 각각을 위해 8bit 사용
  • OpenCV에서는 BGR로 표현 (그림판 색선택 이용 시 좌표가 반대(RGB)임)
  • Blue : (255,0,0), Green : (0,255,0), Red : (0,0,255), White : (255,255,255), Black : (0,0,0)
  • 각 pixel 당 3byte를 사용하기 때문에 용량이 큼. 이를 해결하기 위해 lookup table을 사용하여, 해당 pixel에 index만 저장

2. HSV Color-space

  • H(ue) : 색상. 일반적인 색 의미.  (0도 : Red, 120도 : Green, 240도 : Blue)
  • S(aturation) : 채도. 색의 순수성 의미. 일반적으로 짙다, 흐리다로 표현. 중심에서 바깥쪽으로 이동하면 채도가 높음
  • V(alue) : 명도. 색의 밝고 어두운 정도. 수직축의 깊이로 표현. 어둡다 밝다로 표현이 됨

3. Sample Code

# HSV 변환

import cv2
import numpy as np 

src = cv2.imread('lena.jpg')
hsv = cv2.cvtColor(src, cv2.COLOR_BGR2HSV)

cv2.imshow('src', src)
cv2.imshow('hsv', hsv)

cv2.waitKey()
cv2.destroyAllWindows()

 

[결과]

 

#이미지 영역 설정(그림판 사용해서 값 범위 수작업으로 입력해줌)

import cv2
import numpy as np 

src = cv2.imread('lena.jpg')
hsv = cv2.cvtColor(src, cv2.COLOR_BGR2HSV)

lower = np.array([43,43,117])
upper = np.array([211,220,254])

mask = cv2.inRange(hsv, lower, upper)

cv2.imshow('src', src)
cv2.imshow('hsv', hsv)
cv2.imshow('mask',mask)

cv2.waitKey()
cv2.destroyAllWindows()

[결과]

[그림판]-[색선택]-[색편집]-BGR정보 확인

 

#bit 연산자를 통해서 선택한 영역만 남김

import cv2
import numpy as np 

src = cv2.imread('lena.jpg')
hsv = cv2.cvtColor(src, cv2.COLOR_BGR2HSV)

lower = np.array([43,43,117])
upper = np.array([211,220,254])

mask = cv2.inRange(hsv, lower, upper)

res = cv2.bitwise_and(src, src, mask=mask)

cv2.imshow('src', src)
cv2.imshow('hsv', hsv)
cv2.imshow('mask',mask)
cv2.imshow('res', res)

cv2.waitKey()
cv2.destroyAllWindows()

[결과]

 

[의견]

  • 색이 다양하면 깔끔하게 추출하기가 어려움
  • 예쁜 레나님을 괴물로 만들어서 죄송(ㅠㅠ)

+ Recent posts