[OpenCV error] contours data type = 17 is not supported

-·2023년 5월 11일
0

Problem

세그멘테이션 작업을 위해 이미지 마스크를 만들기 위해 아래와 같이 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 이게 타입 오류라는 것 같기는 했다.


Solve

cnt = np.int32(cnt) #를 추가해주자!

cnt를 넣어주기 전에, np.array의 int32 타입으로 변경해주니 해결됐다. 궁금해서 오류났을 때 dtype을 찍어보니 object 형이었다.
다만 모든 cnt 자체는 cv.cvtColor() -> cv.threshold() -> cv.findContours 의 과정을 거쳐 추출한건데, 왜 어떤 cnt는 정수형으로 뽑히고, 어떤 cnt는 object형으로 뽑혔는지 모르겠다.

하지만 형변환을 통해서 해결할 수 있다는 결론...

끝.

0개의 댓글