일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- anaconda
- Vue
- Javascript #MDN #Webs #Docs
- nodejs
- 요구사항정의서 #기획 #UI/UX기획
- 가상사설망
- tsotry
- 안좋은습관10가지
- Ke
- CSS #pseudo-classes
- behaviorsubject
- 웹기획
- passport.js
- Storyboard
- SSL인증서
- 해시함수
- typescript
- javascript #prototype # array # find()
- guide
- CSS #flex
- TensorFlow
- privateKey
- angular
- PublicKey
- Git
- webpack
- es5 #es6
- securitykey
- 일기
- keytool
- Today
- Total
민자의 지식창고
Opencv 색 바꾸기 본문
색공간 변경하기
OpenCV는 150가지 색공간 변경 함수를 제공 합니다.
HSV를 표현하는 원기둥 모형이 있습니다.
Hue(색상), Saturation(채도), Value(진하기)로 색을 결정 합니다.
원주 방향 각도로 Hue 값을 중심에서 바깥으로 Saturation 값 0~100%,
원기둥 바닥에서 위쪽으로 Value 값을 0~100%로 표현 함.
진하기는 흰색 or 빨간색 등 100%, 검정색을 더해감에 따라 진하기가 희석되며, 완전한 검정색 0%
OpenCV에는 Hue 범위 [0,179], saturation,value [0,255]로 정의
import numpy as np
import cv2
def hsv():
blue = np.uint8([[[255,0,0]]]) #blue 픽셀 1개당 numpy array 생성
green = np.uint8([[[0,255,0]]])
red = np.uint8([[[0,0,255]]])
hsv_blue = cv2.cvtColor(blue, cv2.COLOR_BGR2HSV) #BGR 생성한 Blue를 HSV 값으로 전환
hsv_green = cv2.cvtColor(green, cv2.COLOR_BGR2HSV)
hsv_red = cv2.cvtColor(red, cv2.COLOR_BGR2HSV)
print('blue', hsv_blue)
print('green', hsv_green)
print('red',hsv_red)
hsv()
웹캠을 이용한 칼라 추출
import numpy as np
import cv2
def tracking() :
try:
print('카메라를 구동합니다')
cap = cv2.VideoCapture(0)
except:
print('카메라 구동 실패')
return
while True:
ret, frame = cap.read()
#BGR > HSV 모드
hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)
#HSV > BGR로 가정할 범위 정의
lower_blue = np.array([110, 100, 100 ])
upper_blue = np.array([130, 255, 255])
#HSV 이미지에 청색 추출하기 위한 임계값 설정
mask_blue = cv2.inRange(hsv, lower_blue, upper_blue)
#mask와 원본 이미지를 비트 연산함
res1 = cv2.bitwise_and(frame, frame, mask=mask_blue)
cv2.imshow('original', frame)
cv2.imshow('BLUE', res1)
k = cv2.waitKey(1) & 0xFF
if k==27:
break
cv2.destroyAllWindows()
tracking()
해당 범위를 줄이면, 더 세밀하게 포함을 하며 넓히면 그 반대 입니다
(110, 100, 100) ~ (130, 255, 255) 범위는 Blue 판단
(110, 100, 100) ~ (130, 255, 255) 범위는 Green판단
(-10, 100, 100) ~ (10, 255, 255) 범위는 Red 판단
웹캠에서 전송되는 비디오 프레임을 HSV 색공간으로 변경 합니다
hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)
cv2.inRange()함수는 hsv 모든 값을 low_blue, upper_blue 로 지정된 범위에 있는지 체크 후 범위에 해당하는 부분은 그 값 그대로 아니면 0으로 채워서 결과를 반환 합니다.
그러므로, 해당 범위에 값만 반환 후 해당 범위가 아닌 값읍 0으로 즉 검정색으로 처리 된 후 값을 넘겨 주게 됩니다.
mask_blue = cv2.inRange(hsv, lower_blue, upper_blue)
추출 장면에 잡음이 많이 끼여 있으며, 이런 잡을을 제거하는 방법도 따로 수행을 해야 합니다
참고자료 - 문제가 되었을시에 글을 삭제 하도록 하겠습니다.
https://blog.naver.com/samsjang/220504633218
'개발노트 > OpenCV' 카테고리의 다른 글
Adative Thresholding (0) | 2020.07.24 |
---|---|
OpenCV Thresholding (0) | 2020.07.24 |
OpenCV 이미지 비트 연산 (0) | 2020.07.23 |
openCV로 이미지 확인 (1) | 2020.07.23 |
OpenCV-python (0) | 2020.07.22 |