FindContours support only 8uC1 and 32sC1 images

后端 未结 4 1120
独厮守ぢ
独厮守ぢ 2021-02-14 05:42

i hava problem in fire detection my code is :

ret, frame = cap.read()
lab_image = cv2.cvtColor(frame, cv2.COLOR_BGR2LAB)
L , a , b = cv2.split(lab_image)
ret,t         


        
相关标签:
4条回答
  • 2021-02-14 05:49

    The documention of findContours is clearly saying that it can afford to take single channel images as inputs(i.e 8uc1 and 32sc1) But you are sending 3 channel image.here is the documentation of findcontours http://docs.opencv.org/2.4/modules/imgproc/doc/structural_analysis_and_shape_descriptors.html#findcontours

    0 讨论(0)
  • 2021-02-14 05:58
    cv2.cvtColor(img, cv2.COLOR_BGR2GRAY);
    

    Use this line on the image you wish to find contours on and it should work, because it will convert your image to 8UC1 format (grayscale).

    0 讨论(0)
  • 2021-02-14 06:02

    In my solution I had to convert the dtype into uint8.

    Yes, my image was binary image(single channel), however in my code somehow the thresh_image was changed into float32 data type. But cv2.findContours() cannot handle float32.

    So I had to explicitly convert float32 --> uint8.

    thresh_image = thresh_image.astype(np.uint8)
    
    0 讨论(0)
  • 2021-02-14 06:08

    For completion, the 8UC1 format is 8 byte, unsigned, single channel. In addition to cv2 grayscale, single-channel uint8 format will also be valid, in case anyone is building the image outside of cv2 functions and encounters this error.

    0 讨论(0)
提交回复
热议问题