Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Drawing convexHull in openCV2 Python

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

like image 793
Trevor Judice Avatar asked Jan 06 '17 15:01

Trevor Judice


1 Answers

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.

like image 101
Jeru Luke Avatar answered Sep 20 '22 21:09

Jeru Luke