< * 다각형 근사(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)
: 다시 반복문을 통해 근사 다각형을 반복해 근사점을 이미지 위해 표시 한다.
- 근사 다각형의 정보는 윤곽선의 배열 형태와 동일하다.