[python] OpenCV로 손가락 감지하기

이 포스트에서는 Python의 OpenCV 라이브러리를 사용하여 손가락을 감지하는 방법에 대해 알아보겠습니다. 이 기술은 컴퓨터 비전과 제스처 인식 분야에서 널리 활용되며, 다양한 응용 프로그램에 사용됩니다.

1. 필요한 라이브러리 설치

먼저, OpenCV와 numpy 라이브러리를 설치해야 합니다. 아래의 명령어를 사용하여 설치할 수 있습니다.

pip install opencv-python
pip install numpy

2. 이미지 로드하기

손가락을 감지하기 위해 먼저 이미지를 로드해야 합니다. cv2.imread() 함수를 사용하여 이미지를 로드할 수 있습니다. 예를 들어, hand.jpg라는 이름의 이미지 파일을 로드하는 방법은 다음과 같습니다.

import cv2

image = cv2.imread("hand.jpg")

3. 이미지 전처리

로드한 이미지를 전처리하여 손가락을 더 잘 감지할 수 있도록 해야 합니다. 전처리 단계에서는 이미지를 회색조로 변환하고, 가우시안 블러를 적용하여 잡음을 제거합니다. 이를 위해 다음의 코드를 사용할 수 있습니다.

gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
blurred_image = cv2.GaussianBlur(gray_image, (7, 7), 0)

4. 손가락 감지

이제 전처리한 이미지에서 손가락을 감지할 수 있습니다. 이를 위해 다음의 단계를 따릅니다.

4.1. 경계 찾기

먼저, cv2.Canny() 함수를 사용하여 경계를 찾습니다. 이 함수는 이미지에서 경계를 검출하는 엣지 검출 알고리즘을 제공합니다. 예를 들어, 다음의 코드로 경계를 검출할 수 있습니다.

edges = cv2.Canny(blurred_image, 30, 100)

4.2. 경계 영역 찾기

다음으로, 검출한 경계에서 손가락이 있는 영역을 찾습니다. 이를 위해 cv2.findContours() 함수와 cv2.drawContours() 함수를 사용합니다. 예를 들어, 다음의 코드로 경계 영역을 찾을 수 있습니다.

contours, hierarchy = cv2.findContours(edges, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
cv2.drawContours(image, contours, -1, (0, 255, 0), 2)

4.3. 손가락 개수 세기

마지막으로, 손가락의 개수를 세기 위해 손가락의 동작을 인식해야 합니다. 손가락의 동작을 인식하는 방법은 다양하게 있을 수 있으며, 여기에서는 간단한 방법을 사용하여 손가락 개수를 세어보겠습니다. 예를 들어, 손가락 개수를 출력하는 코드는 다음과 같습니다.

finger_count = len(contours) - 1  # 손바닥 contour 제외
print("손가락 개수:", finger_count)

5. 결과 확인

위의 단계를 모두 수행한 후에는 cv2.imshow() 함수를 사용하여 결과를 확인할 수 있습니다. 예를 들어, 다음의 코드로 결과를 확인할 수 있습니다.

cv2.imshow("Finger Detection", image)
cv2.waitKey(0)
cv2.destroyAllWindows()

이제 위의 코드를 사용하여 OpenCV로 손가락을 감지하는 예제를 실행할 수 있습니다. 손가락의 개수가 정확하게 감지되는지 확인해보세요.

참고 자료