Trouble/OpenCV

cv2.fisheye 사용 시 error: (-215:Assertion failed) objectPoints.type() == CV_32FC3 || objectPoints.type() == CV_64FC3 in function 문제

침닦는수건 2023. 6. 27. 11:36
반응형
cv2.error: OpenCV(4.7.0) /io/opencv/modules/calib3d/src/fisheye.cpp:77: error: (-215:Assertion failed) objectPoints.type() == CV_32FC3 || objectPoints.type() == CV_64FC3 in function 'projectPoints'

cv2.fisheye를 쓸 일이 드물긴 하지만 가끔 어쩌다 쓸 때 위와 같은 오류를 자주 볼 수 있다.

 

오류명만 봐서는 사용하는 변수 타입이 float64, flaot32 중 하나로 통일이 안되어있단 뜻 같은데 타입을 맞춰도 오류가 해결되지 않기 때문에 조금 귀찮다.

 

그 경우 대부분 objectPoints 즉, 사용하는 3D point의 shape이 잘못되었기 때문이다. 

 

일반 cv2에서는 3D point를 [N, 3] 형태로 사용하지만 cv2.fisheye에서는 [1, N, 3]과 같이 첫번째 차원을 추가해줘야 한다. 

 

왜 그런지 모르겠다. cv2.projectPoints 함수 결과를 보면 2D point가 [N, 1, 2] 형태로 나와서 매번 dimension 1 없애는게 귀찮은데 cv2.fisheye.projectPoints는 또 [1, N, 2]다... 왜 이렇게 해뒀는지 이해가 안간다.

 

여튼 cv2.fisheye를 쓸 것이면, 데이터 포맷을 [1, N ,3]으로 쓰자.

반응형