세그멘테이션 작업을 위해 이미지 마스크를 만들기 위해 아래와 같이 cv.drawContours()를 아래와 같이 사용하고 있었다.
cv.drawContours(background, [cnt], 0, (R, G, B), 2)
그런데 특정 컨투어([cnt]) 몇 개에서만 아래와 같은 오류가 발생했다.
Traceback (most recent call last):
File "masking_image.py", line 175, in <module>
Scene_Mask_Generation(file_list, args.png_dir, args.save_dir)
File "masking_image.py", line 126, in Scene_Mask_Generation
cv.drawContours(background, [cnt], 0, (R, G, B), 2)
cv2.error: OpenCV(4.5.2) :-1: error: (-5:Bad argument) in function 'drawContours'
> Overload resolution failed:
> - contours data type = 17 is not supported
> - Expected Ptr<cv::UMat> for argument 'contours'
컨투어를 확인해보니 모두 동일한 2D array 였는데!
왜 특정 컨투어만 안되는지 모르겠어서 해결 방법을 찾아봤다. 대강 contours data type = 17 is not supported
이게 타입 오류라는 것 같기는 했다.
cnt = np.int32(cnt) #를 추가해주자!
cnt를 넣어주기 전에, np.array의 int32 타입으로 변경해주니 해결됐다. 궁금해서 오류났을 때 dtype을 찍어보니 object 형이었다.
다만 모든 cnt 자체는 cv.cvtColor() -> cv.threshold() -> cv.findContours
의 과정을 거쳐 추출한건데, 왜 어떤 cnt는 정수형으로 뽑히고, 어떤 cnt는 object형으로 뽑혔는지 모르겠다.
하지만 형변환을 통해서 해결할 수 있다는 결론...
끝.