Drawing convexHull in openCV2 Python

Trevor Judice picture Trevor Judice · Jan 6, 2017 · Viewed 19k times · Source

So I am trying to draw the convexHull from a contour in python, however when i print the image it is not changing.

roi=mask[y:y+h,x:x+w]
roi = cv2.fastNlMeansDenoisingColored(roi,None,15,15,7,21)
hull = cv2.convexHull(cnt)
cv2.drawContours(roi,[hull],0,(147,0,255),2)
cv2.imshow(str(i),roi)
blank_image[y:y+h,x:x+w] = roi

However, the images that show are the exact same if I did not include the code. I looked online, but cannot seem to find the answer. Here is a sample Image:Sample Image

Answer

Jeru Luke picture Jeru Luke · Jan 6, 2017

I used the following code to obtain convex hull for the image given by you:

import cv2
import numpy as np

img = cv2.imread('2.png')
img_gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
ret, thresh = cv2.threshold(img_gray, 127, 255, 0)
contours,hierarchy = cv2.findContours(thresh,2,1)
print len(contours)
cnt = contours[0]

hull = cv2.convexHull(cnt,returnPoints = False)
defects = cv2.convexityDefects(cnt,hull)

for i in range(defects.shape[0]):
    s,e,f,d = defects[i,0]
    start = tuple(cnt[s][0])
    end = tuple(cnt[e][0])
    far = tuple(cnt[f][0])
    cv2.line(img,start,end,[0,255,0],2)
    cv2.circle(img,far,5,[0,0,255],-1)

cv2.imshow('img',img)

cv2.waitKey(0)
cv2.destroyAllWindows()

Since contours are based on the white region in an image, I was able to obtain two types of contours by altering line 5 in the code.

CASE 1 :

I was able to obtain this: enter image description here

CASE 2 : Now when I change the fifth line in the code segment, I obtain this: enter image description here when I invert the binary image ret, thresh = cv2.threshold(img_gray, 127, 255, 1)

This is because in case 1 the contour was found based on this image enter image description here

Now in case 2 the contour was found based on this image enter image description here

As you can see, contours are found based on the white region in the binary image.

Hope this helps.

I used THIS LINK for obtaining the code and for reference.