본문 바로가기
함수 설명/컴퓨터 비전 (OpenCV, PIL)

[OpenCV] 직선 찾기: cv2.HoughLines() 사용 및 설명

by First Adventure 2024. 9. 29.
반응형

소개

  cv2.HoughLines는 OpenCV에서 이미지 내에서 직선을 검출하는 함수로, 허프 변환(Hough Transform) 알고리즘을 기반으로 동작합니다. 이 함수는 이미지의 경계선 또는 모서리를 분석하여 직선을 찾고, 이를 수학적으로 나타냅니다. 경계선 감지 후 직선을 찾아내는 작업에서 많이 사용됩니다.

 

기본 사용법

# 기본 사용법
import cv2
import numpy as np

# 그레이스케일 이미지 읽기
image = cv2.imread('input_image.jpg', 0)

# Canny 경계선 검출
edges = cv2.Canny(image, 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(image, (x1, y1), (x2, y2), (0, 0, 255), 2)

# 결과 이미지 창에 표시
cv2.imshow('Hough Lines', image)
cv2.waitKey(0)
cv2.destroyAllWindows()

상세 설명

  • 허프 변환(Hough Transform)
    • 허프 변환은 이미지에서 직선을 찾기 위해 널리 사용되는 방법입니다. 이미지의 직선을 검출할 때, 이미지를 직교 좌표계에서 극좌표계로 변환한 후 직선을 수학적으로 찾아냅니다.
  • 파라미터 설명
    • edges: Canny 등의 경계선 검출로 미리 처리된 이미지.
    • 1: rho 값 (픽셀 해상도).
    • np.pi/180: theta 값 (각도 해상도).
    • 200: 직선으로 간주되는 최소 교차점 수. 이 값이 작으면 더 많은 직선이 검출됩니다.
  • 활용
    • 직선 검출은 이미지 처리에서 다양한 응용에 활용됩니다. 예를 들어, 도로 차선 감지, 기하학적 구조 분석, 또는 객체의 모서리를 감지하는 데 매우 유용합니다. 특히 컴퓨터 비전에서 경계선 및 구조를 추적하는 데 자주 사용됩니다.

 

라이센스

  OpenCV 4.4.0 까지는 3-clause BSD license를 따르고 있으며 자유롭게 사용, 수정, 배포할 수 있으며, 상업적 목적으로도 사용할 수 있습니다.
  OpenCV 4.5.0 이상 부터는 Apache 2 License를 따르고 있습니다. 해당 라이선스는 사용, 수정, 배포, 상업적 이용을 자유롭게 허용하며, 사용자가 해당 소프트웨어의 기여자에 대한 특허 청구를 방지하도록 명시하는 것을 특징으로 합니다. 또한 수정된 코드를 배포할 때 변경 사항을 고지해야 하며, 특허 분쟁 시 관련 권리를 상실할 수 있습니다​.

 

관련 내용

  [OpenCV] 비디오 생성 및 저장하기: cv2.VideoWriter() 사용 및 설명

  [OpenCV] 카메라 및 비디오 파일에서 프레임 읽기: cv2.VideoCapture() 사용 및 설명

  [OpenCV] 이미지의 엣지를 보호하며 부드럽게: cv2.medianBlur() 사용 및 설명

  [OpenCV] 이미지 흐리게 만들기: cv2.GaussianBlur() 사용 및 설명

  [OpenCV] 이미지 색상 공간 변환: cv2.cvtColor() 사용 및 설명

  [OpenCV] 이미지 축소: cv2.pyrDown() 사용 및 설명

  [OpenCV] 이미지 확대: cv2.pyrUp() 사용 및 설명

  [OpenCV] 원 찾기: cv2.HoughCircles() 사용 및 설명

  [OpenCV] 직선 찾기: cv2.HoughLines() 사용 및 설명

  [OpenCV] 경계선 찾기: cv2.Canny() 사용 및 설명

  [OpenCV] 적응형 임계값 처리하기: cv2.adaptiveThreshold() 사용 및 설명

  [OpenCV] 이미지 임계값 처리: cv2.threshold() 사용 및 설명

  [OpenCV] 이미지의 원근 변환: cv2.warpPerspective() 사용 및 설명

  [OpenCV] 이미지 기하학적 변환: cv2.warpAffine() 사용 및 설명

  [OpenCV] 이미지 좌우, 상하 반전하기: cv2.flip() 사용 및 설명

  [OpenCV] 이미지 회전: cv2.rotate() 사용 및 설명

  [OpenCV] 이미지 크기 조절: cv2.resize() 사용 및 설명

  [OpenCV] 이미지 팽창하기: cv2.dilate() 사용 및 설명

  [OpenCV] 이미지 침식하기: cv2.erode() 사용 및 설명

  [OpenCV] 이미지 블렌딩하기: cv2.addWeighted() 사용 및 설명

  [OpenCV] 이미지 간 빼기: cv2.subtract 사용법() 사용 및 설명

  [OpenCV] 이미지 간 더하기: cv2.add() 사용 및 설명

  [OpenCV] 이미지에 다각형 그리기: cv2.polylines() 사용 및 설명

  [OpenCV] 이미지에 원 그리기: cv2.circle() 사용 및 설명

  [OpenCV] 이미지에 사각형 그리기: cv2.rectangle() 사용 및 설명

  [OpenCV] 이미지에 선 그리기: cv2.line 사용법() 사용 및 설명

  [OpenCV] 이미지에 텍스트 추가하기: cv2.putText() 사용 및 설명

  [OpenCV] 이미지 창에 표시하기: cv2.imshow() 사용 및 설명

  [OpenCV] 이미지 파일 저장하기: cv2.imwrite() 사용 및 설명

  [OpenCV] 이미지 파일 로드하기: cv2.imread() 사용 및 설명

반응형