[OpenCV-Python Tutorials] 10. 색상 공간 변경하기
목표
- 이 튜토리얼에서는 BGR $$\leftrightarrow$$ Gray, BGR $$\leftrightarrow$$ HSV 등과 같이 한 색상 공간에서 다른 색상 공간으로 이미지를 변환하는 방법을 배웁니다.
- 그 외에도 비디오에서 채색 된 객체를 추출하는 응용 프로그램을 만듭니다.
- 다음 함수를 배울 것입니다 :
cv2.cvtColor()
,cv2.inRange()
등등.
색 공간 변경하기
OpenCV에는 150 가지 이상의 색 공간 변환 방법이 있습니다. 그러나 우리는 가장 널리 사용되는 두 가지를 살펴볼 것입니다. BGR $$\leftrightarrow$$ Gray와 BGR $$\leftrightarrow$$ HSV.
색상 변환을 위해 함수 cv2.cvtColor(input_image, flag)
를 사용합니다. 여기서 flag는 변환 유형을 결정합니다.
BGR $$\rightarrow$$ 회색 변환의 경우 우리는 플래그 cv2.COLOR_BGR2GRAY
를 사용합니다. 마찬가지로 BGR $$\rightarrow$$ HSV에 대해서도 플래그 cv2.COLOR_BGR2HSV
를 사용합니다. 다른 플래그를 얻으려면 Python 터미널에서 다음 명령을 실행하십시오.
1 | import cv2 |
HSV의 경우 색조 범위는 [0,179], 채도 범위는 [0,255], 값 범위는 [0,255]입니다. 서로 다른 소프트웨어는 서로 다른 가늠자를 사용합니다. 따라서 OpenCV 값을 비교하는 경우이 범위를 정규화 해야 합니다.
객체 추적
이제 우리는 BGR 이미지를 HSV로 변환하는 방법을 알고 있습니다. 이 도구를 사용하여 색상이 지정된 객체를 추출 할 수 있습니다. HSV에서는 RGB 색상 공간보다 색상을 표현하는 것이 더 쉽습니다. 우리의 응용 프로그램에서 우리는 파란색 객체를 추출하려고합니다. 그래서 여기에 방법이 있습니다 :
- 비디오의 각 프레임 가져 오기
- BGR에서 HSV 색 공간으로 변환
- 우리는 파란색 범위의 HSV 이미지를 임계값으로 설정합니다.
- 이제 파란색 물체 만 추출하면 우리가 원하는 이미지를 만들 수 있습니다.
아래 코드에 자세히 설명되어 있습니다 :
1 | import cv2 |
아래 이미지는 파란색 물체의 추적을 보여줍니다.
이미지에 약간의 노이즈가 있습니다. 나중 챕터에서 제거하는 방법을 살펴볼 것입니다.
이것은 객체 추적에서 가장 간단한 방법입니다. 윤곽선의 기능을 익히면이 물체의 중심을 찾아 객체를 추적하는 데 사용할 수 있고 카메라 앞에 손을 움직여 다이어그램을 그릴 수 있습니다.
추적 할 HSV 값은 어떻게 찾을까요?
이것은 stackoverflow.com 에 있는 일반적인 질문입니다. 그것은 매우 간단하며 동일한 함수, cv2.cvtColor()
를 사용할 수 있습니다. 이미지를 전달하는 대신 원하는 BGR 값을 전달하면 됩니다. 예를 들어, Green의 HSV 값을 찾으려면 Python 터미널에서 다음 명령을 시도하십시오.
1 | import cv2 |
이제 [H-10, 100,100]과 [H + 10, 255, 255]를 하한선과 상한선으로 취합니다. 이 방법 외에도 GIMP 또는 온라인 변환기와 같은 이미지 편집 도구를 사용하여 이러한 값을 찾을 수 있지만 HSV 범위를 조정하는 것을 잊지 마십시오.
연습 문제
예를 들어 적색, 청색, 녹색 물체를 동시에 추출하기 위해 하나 이상의 색상이 있는 물체를 추출하는 방법을 찾으십시오.