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

이미지 처리 및 컴퓨터 비전 작업을 수행하기 위해 OpenCV는 매우 인기있는 오픈 소스 라이브러리입니다. 이번에는 OpenCV를 사용하여 이미지에서 동영상에서 선을 감지하는 방법에 대해 살펴보겠습니다.

1. OpenCV 및 Python 설치하기

가장 먼저, OpenCV를 설치해야 합니다. Python에서는 pip를 사용하여 간단히 설치할 수 있습니다. 아래 명령을 사용하여 OpenCV를 설치합니다.

pip install opencv-python

2. 이미지 읽기와 전처리

이미지에서 선을 감지하기 전에, 우선 이미지를 읽고 전처리해야 합니다. 아래 코드는 이미지를 읽은 후 그레이스케일로 변환합니다.

import cv2

img = cv2.imread('image.jpg')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

3. 선 감지 알고리즘 적용

세 가지 주요 선 감지 알고리즘인 Hough 변환, 캐니 엣지 검출, 라이엇 변환에 대해 간략히 알아보겠습니다.

3.1 Hough 변환

Hough 변환은 이미지에서 직선을 검출하기 위한 고전적인 알고리즘입니다. 아래 코드는 Hough 변환을 사용하여 이미지에서 선을 감지하는 방법을 보여줍니다.

edges = cv2.Canny(gray, 50, 150)
lines = cv2.HoughLines(edges, 1, np.pi/180, 200)

for line in lines:
    rho, theta = line[0]
    a = np.cos(theta)
    b = np.sin(theta)
    x0 = a*rho
    y0 = b*rho
    x1 = int(x0 + 1000*(-b))
    y1 = int(y0 + 1000*(a))
    x2 = int(x0 - 1000*(-b))
    y2 = int(y0 - 1000*(a))
    
    cv2.line(img, (x1, y1), (x2, y2), (0, 0, 255), 2)

3.2 캐니 엣지 검출

캐니 엣지 검출은 이미지에서 가장자리를 검출하는 알고리즘입니다. 아래 코드는 캐니 엣지 검출을 사용하여 이미지에서 선을 감지하는 방법을 보여줍니다.

edges = cv2.Canny(gray, 50, 150)

lines = cv2.HoughLinesP(edges, 1, np.pi/180, threshold=100, minLineLength=100, maxLineGap=10)

for line in lines:
    x1, y1, x2, y2 = line[0]
    cv2.line(img, (x1, y1), (x2, y2), (0, 255, 0), 2)

3.3 라이엇 변환

라이엇 변환은 이미지에서 특정한 형태를 검출하기 위한 알고리즘입니다. 아래 코드는 라이엇 변환을 사용하여 이미지에서 선을 감지하는 방법을 보여줍니다.

edges = cv2.Canny(gray, 50, 150)
lines = cv2.HoughLines(edges, 1, np.pi/180, 200)

for line in lines:
    rho, theta = line[0]
    a = np.cos(theta)
    b = np.sin(theta)
    x0 = a*rho
    y0 = b*rho
    x1 = int(x0 + 1000*(-b))
    y1 = int(y0 + 1000*(a))
    x2 = int(x0 - 1000*(-b))
    y2 = int(y0 - 1000*(a))
    
    cv2.line(img, (x1, y1), (x2, y2), (0, 0, 255), 2)

4. 결과 표시

감지된 선을 원본 이미지에 표시하기 위해 아래 코드를 사용합니다.

cv2.imshow('Detected Lines', img)
cv2.waitKey(0)
cv2.destroyAllWindows()

위의 코드를 실행하면 이미지에서 감지된 선이 표시됩니다.

이제, OpenCV를 사용하여 이미지에서 동영상에서 선을 감지하는 방법에 대해 알아보았습니다. 다양한 알고리즘을 사용하여 선을 감지해보고, 결과를 시각화해보세요!

참고 자료