일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 막내의막무가내 플러터 flutter
- 막내의막무가내 SQL
- 막내의막무가내 안드로이드
- 막내의막무가내 코틀린 안드로이드
- 막내의막무가내 rxjava
- 막내의막무가내 일상
- 막내의막무가내 알고리즘
- 부스트코스
- 주엽역 생활맥주
- flutter network call
- 안드로이드 Sunflower 스터디
- Fragment
- 안드로이드 sunflower
- 막내의 막무가내
- 막내의막무가내 안드로이드 코틀린
- 프로그래머스 알고리즘
- 막내의막무가내 코틀린
- 막무가내
- 안드로이드
- 막내의막무가내 안드로이드 에러 해결
- 프래그먼트
- 막내의막무가내 프로그래밍
- 막내의막무가내 플러터
- 막내의 막무가내 알고리즘
- 막내의막무가내 목표 및 회고
- 주택가 잠실새내
- 부스트코스에이스
- 막내의막무가내
- 2022년 6월 일상
- 막내의막무가내 코볼 COBOL
- Today
- Total
막내의 막무가내 프로그래밍 & 일상
[openCV] HSV 특정색 검출하기 본문
import numpy as np
import cv2
# BGR(파랑색)
color = [255, 0, 0]
# cvtColor 함수의 입력으로 사용할 수 있도록 한 픽셀로 구성된 이미지로 변환한다.
pixel = np.uint8([[color]])
# cvtColor를 사용하여 HSV 색공간으로 변환한다.
hsv = cv2.cvtColor(pixel, cv2.COLOR_BGR2HSV)
# HSV값을 출력하기위해 픽셀값만 갖고온다.
hsv = hsv[0][0]
# bgr과 hsv 값 출력
print("bgr: ", color)
print("hsv: ", hsv)
import cv2
# 이미지파일을 컬러로 읽어온다.
img_color = cv2.imread('food.jpg')
# 이미지의 높이와 너비를 갖고온다.
height,width = img_color.shape[:2]
# hsv이미지로 변환한다.
img_hsv = cv2.cvtColor(img_color, cv2.COLOR_BGR2HSV)
# 범위를 정하여 hsv이미지에서 원하는 색 영역을 바이너리 이미지로 생성한다.
# (가운데와 마지막값은 너무어두워서 검은색에 가까운색과 너무 옅어서 흰색에 가까운색을 제외시키기위해 30으로해야한다.
lower_blue = (120-10, 30, 30)
upper_blue = (120+10, 255, 255)
# 앞서 선언한 범위값을 사용하여 바이너리 이미지를 얻는다.(범위내에 있는 픽셀들은 흰색이되고 나머지는 검은색이 된다.)
img_mask = cv2.inRange(img_hsv, lower_blue, upper_blue)
# 원본이미지에서 범위값에 해당하는 영상부분을 흭득한다.
img_result = cv2.bitwise_and(img_color, img_color, mask = img_mask)
# 화면에 영상결과들 보여준다.
cv2.imshow('img_color', img_color)
cv2.imshow('img_mask', img_mask)
cv2.imshow('img_result', img_result)
# 키보드입력대기함수 및 자원해제
cv2.waitKey(0)
cv2.destroyAllWindows()
색공간은 색을 표현하는 방법을 3차원 좌표계로 표시한것이다.
RGB 색공간은 색을 혼합하면 명도가 올라가는 가상 혼합방식으로 색을 표현한다.
BGR과 RGB는 보다시피 BLUE와 RED의 채널순서만 다를 뿐 같은 원리이다.
HSV 색 공간 또는 HSV 모델은 색을 표현하는 하나의 방법이자, 그 방법에 따라 색을 배치하는 방식이다. 색상(Hue), 채도(Saturation), 명도(Value)의 좌표를 써서 특정한 색을 지정한다.
RGB색공간은 3개의 채널이 혼합하여 색을 표현하기 때문에 원하는 색의 범위를 정하기 어렵다. 그래서 HSV 색공간으로 변환하여 원하는 색의 범위를 정한다. 즉 HSV는 원하는 색의 범위를 정하기가 쉽다. H(HUE색상)가 일정한 범위를 갖는 순수한 색 정보를 가지고 있기 떄문이다. (다음그림참고)
S(채도)는 색상의 진함을 의미한다. 값이 클수록 진해진다. 작아질수록 흰색에 가까워진다.
오픈씨브이에서는 0~255까지의 범위를 가진다.
V(명도)는 색상의 밝은 정도를 의미한다. 검은색을 0으로 했을 때 값이 커질 수록 색상이 밝아진다.
출처 및 참고:
https://ko.wikipedia.org/wiki/HSV_%EC%83%89_%EA%B3%B5%EA%B0%84
https://www.123rf.com/photo_65990122_color-colors-wheel-names-degrees-rgb-hsb-hsv-hue.html
https://gammabeta.tistory.com/390
https://www.youtube.com/watch?v=0KCTvoMXHPE&list=PLwfJJiO20qkDue05S5MNhgYNnClMVlagN&index=1
'OpenCV' 카테고리의 다른 글
[OpenCV] 함수 정리 (0) | 2020.03.26 |
---|---|
[OpenCV] bgr 이미지 -> grayscale 이미지로 변환 (grayscale 구현) (0) | 2020.03.26 |
[openCV] 이미지 이진화 하기 (0) | 2019.07.14 |
[openCV] 동영상 관련 (0) | 2019.07.11 |
[openCV] 첫 설치 및 프로젝트(이미지 불러오기->색바꾸기->저장하기) (0) | 2019.07.11 |