# contour를 찾아 크기가 작은 순으로 정렬
cnts = cv2.findContours(edged.copy(), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
cnts = imutils.grab_contours(cnts)
cnts = sorted(cnts, key=cv2.contourArea, reverse=True)
photo_cnt = None
# 정렬된 contour를 반복문으로 수행하며 윤곽 추출
for c in cnts:
peri = cv2.arcLength(c, True)
approx = cv2.approxPolyDP(c, 0.02 * peri, True)
print(len(approx)) # 5, 3, 11, 16
# 전체이미지를 가져올 거니까
if len(approx) == 5:
photo_cnt = approx
break
# 만약 추출한 윤곽이 없을 경우 오류
if photo_cnt is None:
raise Exception(("Could not find receipt outline."))
참고한 예시에서는 문서나 영수증을 스캔해서 4각형 윤곽을 가져왔는데,
실습한 이미지는 인식해야 하는 부분이 5각형이다.
four_point_transform을 실행하려 했으나,
size가 10이므로 (4,2) 형태로 reshape에 실패한다..