728x90
HSV 는 Hue , 색상
Saturation 채도
Value (Brightness) 명도 를 뜻한다.
OpenCV를 통하여 간단하게 HSV 변경이 가능하다.
먼저 원본 이미지를
cv2.cvtColor 함수를 통하여 BGR2HSV 로 변환.
이미지 변환을 위하여 float32로 변환을 해준뒤에 작업한다.
그 후에는 cv2.split 함수를 통하여 , 이미지를 hue, saturation, value , 3개의 채널로 손쉽게 나눌수 있다.
3개 채널의 값은 넘파이로, 0부터 255까지의 값만을 갖는다.
여기서 각 채널의 값을 넘파이 연산을 통하여 조절할 수 있다.
후에 3개의 채널을 다시 cv2.merge 함수를 통하여 합치고, uint8로 변경후에
이미지를 다시 불러오면 변경완료!!!
코드예제
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
|
import cv2
import numpy as np
img = cv2.imread('data/images/capsicum.jpg',1)
cv2.imshow('original', img)
# 채도 낮추기
saturationScale = 0.01
hsvImage = cv2.cvtColor(img , cv2.COLOR_BGR2HSV)
hsvImage = np.float32(hsvImage)
# 채널로 분리하는 함수 ( 다차원일 경우 사용)
H, S, V = cv2.split(hsvImage) # 분리됨
# 유용한함수. np.clip 함수 이용하면 0보다 작으면 0으로 맞추고, 255보다 크면 255로 맞추라 할수 있다.
S = np.clip( S * saturationScale , 0,255 ) # 계산값, 최소값, 최대값
# 여기서는 saturation값만 조정하였다.
# H,S,V 나눈 채널을 다시 합치는 함수
hsvImage = cv2.merge( [ H,S,V ] )
# 위에서 float으로 작업 했으로, 다시 uint8로 변경해야된다.
hsvImage = np.uint8(hsvImage)
# BGR로 다시 변경해야 , 우리가 눈으로 확인 가능 cv2라
imgBgr = cv2.cvtColor(hsvImage, cv2.COLOR_HSV2BGR)
cv2.imshow('dst', imgBgr)
cv2.waitKey()
cv2.destroyAllWindows()
|
cs |
* numpy.clip 함수는 값을 제약한다.
ex )
a = [ 1,2,3,4,5,6,7,8,9 ]
b = numpy.clip( a, 3, 7 ) # 해당 배열, 최소값, 최대값이 들어간다.
위와 같은 경우에 b 는 [ 3,3,3,4,5,6,7,7,7 ] 이 된다.
'IT 프로그래밍 관련 > OpenCV' 카테고리의 다른 글
OpenCV Persperctive 2 (마우스로 좌표 찍기) (0) | 2021.04.26 |
---|---|
OpenCV AffineTransform, homography(perspective)Transform (0) | 2021.04.23 |
OpenCV 이미지 Transformations ( rotation, translation ) (0) | 2021.04.22 |
OpenCV threshold, 이미지형태 변환(dilate,erode, opening, closing) (0) | 2021.04.22 |
OpenCV 비디오파일 열기, 내 캠으로 비디오파일 저장 (0) | 2021.04.21 |
댓글