filling contours with opencv python

前端 未结 3 1352
梦谈多话
梦谈多话 2020-12-23 17:50

I have binary image with polylines created with:

cv2.polylines(binaryImage,contours,1, (255,255,255))

What I need now is effective method t

相关标签:
3条回答
  • 2020-12-23 18:06

    You can use fillPoly or drawContours if your contour is closed. Pulling together @jabaldonedo and @ash-ketchum answers:

    import cv2
    import matplotlib.pyplot as plt
    import numpy as np
    
    # Lets first create a contour to use in example
    cir = np.zeros((255,255))
    cv2.circle(cir,(128,128),10,1)
    _, contours, _ = cv2.findContours(cir.astype(np.uint8), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE)
    
    # An open circle; the points are in contours[0]
    plt.figure()
    plt.imshow(cir)
    
    # Option 1: Using fillPoly
    img_pl = np.zeros((255,255))
    cv2.fillPoly(img_pl,pts=contours,color=(255,255,255))
    plt.figure()
    plt.imshow(img_pl)
    
    # Option 2: Using drawContours
    img_c = np.zeros((255,255))
    cv2.drawContours(img_c, contours, contourIdx=-1, color=(255,255,255),thickness=-1)
    plt.figure()
    plt.imshow(img_c)
    
    plt.show()
    

    both img_pl and img_c contain a filled in circle from the points in contour[0]

    0 讨论(0)
  • 2020-12-23 18:10

    I think what you are looking for is cv2.fillPoly, which fills the area bounded by one or more polygons. This is a simple snippet, I generate a contour of four points representing vertices of a square, then I fill the polygon with a white color.

    import numpy as np
    import cv2
    
    contours = np.array( [ [50,50], [50,150], [150, 150], [150,50] ] )
    img = np.zeros( (200,200) ) # create a single channel 200x200 pixel black image 
    cv2.fillPoly(img, pts =[contours], color=(255,255,255))
    cv2.imshow(" ", img)
    cv2.waitKey()
    

    enter image description here

    0 讨论(0)
  • 2020-12-23 18:15

    While using cv2.drawContours function, set thickness=cv2.FILLED and you are done.

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