민자의 지식창고

Opencv 색 바꾸기 본문

개발노트/OpenCV

Opencv 색 바꾸기

전지적민자시점 2020. 7. 23. 18:19

색공간 변경하기

 OpenCV는 150가지 색공간 변경 함수를 제공 합니다.

 HSV를 표현하는 원기둥 모형이 있습니다.

 Hue(색상), Saturation(채도), Value(진하기)로 색을 결정 합니다.

 원주 방향 각도로 Hue 값을 중심에서 바깥으로 Saturation 값 0~100%,

 원기둥 바닥에서 위쪽으로 Value 값을 0~100%로 표현 함.

 진하기는 흰색 or 빨간색 등 100%, 검정색을 더해감에 따라 진하기가 희석되며, 완전한 검정색 0%

 

 OpenCV에는 Hue 범위 [0,179], saturation,value [0,255]로 정의 

HSV 원기둥 모형

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

 

[09편] 색공간 바꾸기 및 색 추적

이미지 프로세싱 & 컴퓨터 비전OpenCV-Python 강좌 9편 : 색공간 바꾸기 및 색 추적 필요환경: 파...

blog.naver.com

 

728x90

'개발노트 > 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