프로그래밍/Python

[Python] error: (-5:Bad argument) in function 'pointPolygonTest'

채윤아빠 2022. 5. 23. 21:32
728x90
반응형

문제점 및 증상

특정 좌표가 지정된 다각형 영역에 속한지 확인하여 위하여 cv2.pointPolygonTest() 함수를 이용하던 중 다음과 같은 오류가 발생하였습니다.

  File "d:\Dev\VisionAI\vpc_multi\src\cmd_detector.py", line 163, in 
    process_detection_datas(frame_no, classes, scores, boxes)
  File "d:\Dev\VisionAI\vpc_multi\src\cmd_detector.py", line 57, in process_detection_
    if (cv2.pointPolygonTest(_polygon_pedestrain, pt_center, True) >= 0):
cv2.error: OpenCV(4.5.5) :-1: error: (-5:Bad argument) in function 'pointPolygonTest'
> Overload resolution failed:
>  - Can't parse 'pt'. Sequence item with index 0 has a wrong type
>  - Can't parse 'pt'. Sequence item with index 0 has a wrong type

오류가 발생한 부분의 코드는 다음과 같았습니다.

            pt_center = ((left + int(width / 2)), (top + int(height / 2)))
            if (cv2.pointPolygonTest(_polygon_pedestrain, pt_center, True) >= 0):
                pedestrain_count += 1

원인분석 및 해결

오류의 내용으로 봤을 때 두 번째 파라미터의 데이터 형이 달라서 발생한 것으로 추측되는데, int 형으로 맞추기 위하여 폭과 높이를 강제로 int형으로 변환하여 처리하였지만, 결과적으로 pt_center는 int형이 아니었습니다.

그래서 다음과 같이 수정하여 문제를 해결하였습니다.

            pt_center = (int(left + (width / 2)), int(top + (height / 2)))
            if (cv2.pointPolygonTest(_polygon_pedestrain, pt_center, True) >= 0):
                pedestrain_count += 1