[파이썬] opencv-python 이미지 안의 물체 카운팅

이미지 처리는 컴퓨터 비전 분야에서 매우 중요한 역할을 합니다. 이미지 안에 있는 물체를 검출하고 카운팅하는 작업은 많은 응용 분야에서 사용되고 있습니다. 이번 블로그 게시물에서는 Python과 OpenCV를 사용하여 이미지 안의 물체를 카운팅하는 방법에 대해 알아보겠습니다.

OpenCV란?

OpenCV(Open Source Computer Vision)는 실시간 컴퓨터 비전을 위한 라이브러리입니다. OpenCV는 이미지와 비디오 처리, 객체 검출, 얼굴 인식, 모션 추적 등 다양한 컴퓨터 비전 작업에 사용됩니다. OpenCV는 C++, Python, Java 등 다양한 프로그래밍 언어에서 사용할 수 있으며, 본 게시물에서는 Python 기반의 OpenCV를 다루겠습니다.

이미지 불러오기

먼저, OpenCV를 사용하여 이미지를 불러옵니다. 다음의 코드를 사용하면 이미지 파일을 읽어올 수 있습니다.

import cv2

image = cv2.imread('image.jpg')

이미지 전처리

이미지 전처리는 물체를 검출하기 전에 필요한 과정입니다. 여러 가지 이미지 처리 기법 중에서도 주로 그레이스케일 변환과 흑백 이진화를 사용합니다. 그레이스케일 변환은 컬러 이미지를 흑백 이미지로 변환하는 작업이며, 다음과 같이 수행할 수 있습니다.

gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

흑백 이진화는 이미지를 흑과 백으로 이진화하는 작업입니다. 이진화 작업은 이미지를 노이즈를 줄이고 물체를 검출하기 쉽게 만들어줍니다. 다음 코드는 흑백 이진화 작업을 수행하는 예시입니다.

_, binary_image = cv2.threshold(gray_image, 127, 255, cv2.THRESH_BINARY_INV)

물체 검출

이진화된 이미지를 사용하여 물체를 검출합니다. OpenCV에서는 findContours 함수를 사용하여 이미지 안의 물체의 윤곽선을 찾을 수 있습니다. 다음의 코드는 윤곽선을 찾는 예시입니다.

contours, _ = cv2.findContours(binary_image, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)

물체 카운팅

검출된 윤곽선을 사용하여 물체의 개수를 카운팅합니다. 카운트는 윤곽선의 개수로 나타낼 수 있습니다. 다음의 코드는 검출된 윤곽선의 개수를 출력하는 예시입니다.

count = len(contours)
print("물체 개수:", count)

결과 확인

마지막으로, 결과를 확인하기 위해 이미지에 윤곽선과 개수를 표시할 수 있습니다. 다음의 코드는 검출된 윤곽선을 이미지에 그리고, 개수를 표시하는 예시입니다.

cv2.drawContours(image, contours, -1, (0, 255, 0), 2)
cv2.putText(image, "물체 개수: {}".format(count), (10, 30), cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 255, 0), 2)

cv2.imshow("결과", image)
cv2.waitKey(0)
cv2.destroyAllWindows()

이렇게 하면 이미지 안의 물체를 검출하고 카운팅하는 간단한 작업을 수행할 수 있습니다. 이를 활용하여 다양한 응용 분야에 활용할 수 있습니다. OpenCV의 다양한 함수와 기능을 활용하여 이미지 처리 작업을 더욱 정교하게 수행할 수 있습니다. OpenCV 공식 문서나 다른 자료들을 참고하여 더욱 다양한 기능을 익히시기 바랍니다.