색상을 사용한 물체 감지

색상을 이용한 물체 감지



이 프로젝트에서 저는 객체 감지 작업을 했고 객체의 좌표, 너비, 높이를 찾으려고 했습니다(이 프로젝트 객체는 파란색입니다).

Lower와 Upper로 결정되는 HSV 색상 범위를 사용하여 다채로운 물체를 감지했습니다. 여기서 나는 파란색 물체를 선호했습니다.

# blue HSV
blueLower = (84,  98,  0)
blueUpper = (179, 255, 255)


색상 범위를 얻었을 때 캡처 크기를 설정한 다음 캡처를 읽습니다.

먼저 노이즈와 캡처의 디테일을 줄이기 위해 가우시안 블러링을 적용합니다.

#blur
blurred = cv2.GaussianBlur(imgOriginal, (11,11), 0)


Gaussian Blurring 후 HSV 색상 형식으로 변환합니다.

# HSV
hsv = cv2.cvtColor(blurred, cv2.COLOR_BGR2HSV)


파란색 개체를 감지하기 위해 마스크를 정의합니다.

# mask for blue
mask = cv2.inRange(hsv, blueLower, blueUpper)


마스크를 쓴 후에는 마스크를 쓴 물건 주변을 청소해야 합니다. 따라서 먼저 Erosion을 적용한 다음 Dilation을 적용합니다.

# deleting noises which are in area of mask
mask = cv2.erode(mask, None, iterations=2)
mask = cv2.dilate(mask, None, iterations=2)


노이즈를 제거한 후 Contours를 찾아야 합니다.

contours, _ = cv2.findContours(mask.copy(), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
center = None


윤곽선이 발견되면 가장 큰 윤곽선을 얻을 것입니다.

# get max contour
c = max(contours, key=cv2.contourArea)


발견된 컨투어는 직사각형으로 바뀌어야 합니다. 이 cv2.minAreaRect() 함수는 객체 영역을 덮을 수 있는 가장 작은 사각형을 반환합니다.

rect = cv2.minAreaRect(c)


화면에서 직사각형의 정보를 출력하고 싶기 때문에 정보에 도달해야 합니다.

((x,y), (width, height), rotation) = rect
s = f"x {np.round(x)}, y: {np.round(y)}, width: {np.round(width)}, height: {np.round(height)}, rotation: {np.round(rotation)}"


내가 찾은 이 사각형을 사용하여 Box를 얻고 싶습니다. 다음에는 이 Box를 사용하여 Rectangle을 그릴 것입니다.

# box
box = cv2.boxPoints(rect)
box = np.int64(box)


이미지 모멘트는 이미지 픽셀 강도의 특정 가중 평균(모멘트)입니다.
Momentum을 찾으려면 Max를 사용합니다. "c"로 명명된 컨투어. 그런 다음 센터 포인트를 찾습니다.

# moment
M = cv2.moments(c)
center = (int(M["m10"] / M["m00"]), int(M["m01"] / M["m00"]))


이제 찾은 중심을 그립니다.

# point in center
cv2.circle(imgOriginal, center, 5, (255, 0, 255), -1)


Center Point 이후에 Contour를 그립니다.

# draw contour
cv2.drawContours(imgOriginal, [box], 0, (0, 255, 255), 2)


화면에 코디네이터 등을 인쇄하고 싶다

# print inform
cv2.putText(imgOriginal, s, (25, 50), cv2.FONT_HERSHEY_COMPLEX_SMALL, 1, (255, 255, 255), 2)


최종:






프로젝트 링크: https://github.com/ierolsen/Object-Detection-with-OpenCV/blob/main/4-object-detection-with-color.py

내 GitHub에서 더 많은 것을 찾을 수 있습니다: https://github.com/ierolsen/Object-Detection-with-OpenCV

좋은 웹페이지 즐겨찾기