[python] OpenCV를 사용하여 이미지에서 동영상에서 움직임 감지하기

이 문서에서는 Python과 OpenCV를 사용하여 이미지에서 동영상에서 움직임을 감지하는 방법에 대해 알아보겠습니다.

준비물

이 예제를 실행하기 위해서는 다음의 것들이 필요합니다:

이를 설치하기 위해서는 다음의 명령어를 사용할 수 있습니다:

pip install opencv-python

이미지에서 움직임 감지하기

다음은 이미지에서 움직임을 감지하는 간단한 코드입니다:

import cv2

# 이미지 불러오기
image = cv2.imread('path/to/image.jpg')

# 이미지를 그레이스케일로 변환
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

# 이미지 가장자리를 감지하기 위해 가우시안 블러를 적용
blur = cv2.GaussianBlur(gray, (21, 21), 0)

# 초기 프레임 설정
first_frame = blur

while True:
    # 다음 프레임 불러오기
    ret, frame = cap.read()

    # 프레임이 제대로 불러와진 경우에만 작업 수행
    if not ret:
        break

    # 프레임을 그레이스케일로 변환
    gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)

    # 프레임 가장자리를 감지하기 위해 가우시안 블러를 적용
    blur = cv2.GaussianBlur(gray, (21, 21), 0)

    # 이전 프레임과 현재 프레임의 차이 계산
    frame_delta = cv2.absdiff(first_frame, blur)

    # 차이 이미지 이진화
    thresh = cv2.threshold(frame_delta, 30, 255, cv2.THRESH_BINARY)[1]

    # 차이 이미지에 대한 윤곽선 찾기
    contours, _ = cv2.findContours(thresh.copy(), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)

    # 프레임에 윤곽선 그리기
    for contour in contours:
        if cv2.contourArea(contour) < 500:
            continue
        (x, y, w, h) = cv2.boundingRect(contour)
        cv2.rectangle(frame, (x, y), (x + w, y + h), (0, 255, 0), 2)

    # 프레임 출력
    cv2.imshow("Motion Detection", frame)

    # 프로그램 종료를 위한 키 입력 대기
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

# 모든 창 닫기
cv2.destroyAllWindows()

위의 예제 코드에서는 이미지를 불러온 후, 그레이스케일로 변환하고 가우시안 블러를 적용하여 가장자리를 감지합니다. 그리고 초기 프레임으로 설정한 후, 다음 프레임과의 차이를 계산하고 이진화하여 움직임을 감지합니다. 가장자리를 찾은 후에는 윤곽선을 그려 움직임이 있는 영역을 표시합니다.

위의 코드를 실행하면 움직임이 감지된 프레임이 나타나며, ‘q’ 키를 눌러 프로그램을 종료할 수 있습니다.

이것은 이미지에서 동영상에서 움직임을 감지하는 간단한 예제입니다. OpenCV는 다양한 이미지 처리 및 컴퓨터 비전 작업에 유용한 도구입니다. 더 많은 기능과 예제 코드에 대해 OpenCV 공식 문서를 참조하십시오.