Computer >> 컴퓨터 >  >> 프로그램 작성 >> Python

Python에서 OpenCV를 사용하여 특정 색상(여기서는 파란색) 감지?

<시간/>

많은 사람들에게 이미지 처리는 무섭고 힘든 작업처럼 보일 수 있지만 많은 사람들이 생각하는 것만큼 어렵지 않습니다. 이 튜토리얼에서는 Python을 사용하여 openCv에서 기본 색상 감지를 수행합니다.

색상은 컴퓨터에서 어떻게 작동합니까?

우리는 기본적으로 색상 범위를 숫자 튜플로 설명하는 색상 공간 또는 색상 모델로 컴퓨터의 색상을 나타냅니다.

각 색상을 선택하는 대신 우리가 사용하는 가장 일반적인 색상 공간에 대해 논의할 것입니다. RGB(빨간색, 녹색, 파란색) 및 HSV(색조, 채도, 값).

RGB는 기본적으로 세 가지 구성 요소의 튜플로 색상을 설명합니다. 각 구성 요소는 0에서 255 사이의 값을 가질 수 있습니다. 여기서 튜플 (0, 0, 0)은 검정색을 나타내고 (255, 255, 255)는 흰색을 나타냅니다. 예를 들어 화면에 순수한 파란색 픽셀을 표시한다면 R 값은 0, G 값은 0, B 값은 255가 됩니다.

다음은 RGB 색상의 몇 가지 예입니다.

색상 RGB 값
빨간색 255, 0, 0
주황색 255, 128, 0
핑크 255, 153, 255

HSV를 사용하면 픽셀도 3개의 매개변수로 표시되지만 대신 색조, 채도 및 값입니다. 그러나 RGB와 달리 HSV는 기본 색상을 사용하여 픽셀을 나타내지 않습니다. 대신 픽셀의 색상 또는 음영인 색조를 사용합니다.

채도는 색상의 강도입니다. 여기서 0의 채도는 0을 나타내고 255의 채도는 최대 강도를 나타냅니다. 값은 색상의 밝기 또는 어두운 정도를 알려줍니다.

올바른 색상 감지

먼저 작업할 이미지를 다운로드해 보겠습니다.

Python에서 OpenCV를 사용하여 특정 색상(여기서는 파란색) 감지?

이제 색상 이미지를 얻었으므로 재미있는 부분을 시작할 수 있습니다. 좋아하는 Python 텍스트 편집기 또는 IDE를 열고 시작하기만 하면 됩니다.

cv2import numpy를 npimport imutilsimg =cv2.imread('color2.jpg')로 가져오기

위의 코드 줄에서 처음 두 줄은 모든 가져오기를 처리합니다. 세 번째 줄에서는 이미지 크기를 조정하고 색상 범위를 찾는 데 도움이 되는 imutils 모듈을 가져오고 있습니다. 4행에서 이미지를 엽니다.

hsv =cv2.cvtColor(img, cv2.COLOR_BGR2HSV)

이제 hsv가 색상과 강도를 구분하는 데 도움이 되므로 이미지를 hv 이미지로 변환했습니다.

lower_range =np.array([110,50,50])upper_range =np.array([130,255,255])

이제 감지하려는 파란색의 상한과 하한을 정의합니다. 이러한 한계를 찾기 위해 imutils 라이브러리에서 range-detector 스크립트를 사용할 수 있습니다. 이 값을 NumPy 배열에 넣습니다.

마스크 =cv2.inRange(hsv, lower_range, upper_range)

여기에서는 실제로 지정된 파란색으로 마스크를 만들고 있습니다. 마스크는 단순히 이미지의 특정 부분을 나타냅니다. 이 경우 hv 이미지를 통해 확인하고 하위 범위와 상위 범위 사이에 있는 색상을 확인합니다. 일치하는 영역은 이미지가 마스크 변수로 설정됩니다.

cv2.imshow('image', img)cv2.imshow('mask', mask)while(True):k =cv2.waitKey(5) &0xFF if k ==27:breakcv2.destroyAllWindows() 

마지막으로 원본 이미지와 마스크 이미지를 나란히 표시하여 차이점을 확인할 수 있습니다. 코드에서 0xFF가 무엇을 의미하는지 이해하려면 이것을 읽으십시오. 그런 다음 코드는 사용자가 'Esc' 버튼을 눌러 종료하고 정리를 위해 모든 창을 파괴할 때까지 기다립니다.

최종 프로그램

cv2import numpy를 npimport로 가져오기 imutilsimg =cv2.imread('color2.jpg')hsv =cv2.cvtColor(img, cv2.COLOR_BGR2HSV)lower_range =np.array([110,50,50])upper_range =array([130,255,255])mask =cv2.inRange(hsv, lower_range, upper_range)cv2.imshow('image', img)cv2.imshow('mask', mask)while(True):k =cv2.waitKey(5 ) &0xFF if k ==27:breakcv2.destroyAllWindows()

출력

Python에서 OpenCV를 사용하여 특정 색상(여기서는 파란색) 감지?

위에서 우리는 마스크에 몇 개의 검은 점이 있는 것을 볼 수 있습니다. 바로 노이즈입니다.