Processor

【OpenCV】 다각형 근사(Approx Poly)

작성자 임베디드코리아 작성일26-04-16 21:55 조회100회 댓글0건
< *  다각형 근사(Approx Poly)  * >

◆ 영상이나 이미지의 윤곽점을 압축해 다각형으로 근사하기 위해 사용한다.
◆ 영상이나 이미지에서 윤곽선의 근사 다각형을 검출할 수 있다.

----< 예제 : (Approx-Poly.py  >-------------------------------------------------------------------
import cv2

src = cv2.imread("Image/car.png", cv2.IMREAD_COLOR)

gray = cv2.cvtColor(src, cv2.COLOR_RGB2GRAY)
ret, binary = cv2.threshold(gray, 0, 255, cv2.THRESH_OTSU)
binary = cv2.bitwise_not(binary)

contours, hierarchy = cv2.findContours(binary, cv2.RETR_LIST, cv2.CHAIN_APPROX_TC89_KCOS)

for contour in contours:
    epsilon = cv2.arcLength(contour, True) * 0.02
    approx_poly = cv2.approxPolyDP(contour, epsilon, True)

    for approx in approx_poly:
        cv2.circle(src, tuple(approx[0]), 3, (255, 0, 0), -1)

cv2.imshow("src", src)
cv2.waitKey(0)
cv2.destroyAllWindows()
--------------------------------------------------------------------------------------------------------
▶ for contour in contours:
      epsilon = cv2.arcLength(contour, True) * 0.02
    : 반복문을 사용하여 색인값과 하위 윤곽선 정보로 반복한다.
      - 근사치 정확도를 계산하기 위해 윤곽선 전체 길이의 2%로 활용한다
      - 윤곽선의 전체 길이를 계산하기 위해 cv2.arcLength()을 이용해 검출된 윤곽선의 전체 길이를 계산한다.
      - cv2.arcLength(윤곽선, 폐곡선)을 의미한다.
      - 윤곽선은 검출된 윤곽선들이 저장된 Numpy 배열이다.
      - 폐곡선은 검출된 윤곽선이 닫혀있는지, 열려있는지 설정한다.

▶ approx_poly = cv2.approxPolyDP(contour, epsilon, True)
    : cv2.approxPolyDP()를 활용해 윤곽선들의 윤곽점들로 근사해 근사 다각형으로 반환한다.
      - cv2.approxPolyDP(윤곽선, 근사치 정확도, 폐곡선)을 의미 한다.
      - 윤곽선은 검출된 윤곽선들이 저장된 Numpy 배열이다.
      - 근사치 정확도는 입력된 다각형(윤곽선)과 반환될 근사화된 다각형 사이의 최대 편차 간격을 의미한다.
      - 폐곡선은 검출된 윤곽선이 닫혀있는지, 열려있는지 설정한다.

▶ for approx in approx_poly:
      cv2.circle(src, tuple(approx[0]), 3, (255, 0, 0), -1)
    : 다시 반복문을 통해 근사 다각형을 반복해 근사점을 이미지 위해 표시 한다.
      - 근사 다각형의 정보는 윤곽선의 배열 형태와 동일하다.