简体   繁体   English

在openCV2 Python中绘制convexHull

[英]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. 所以我试图从python中的轮廓绘制convexHull,但是当我打印图像时它没有改变。

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: 这是一个示例图片: 示例图像

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. 由于轮廓基于图像中的白色区域,因此我可以通过更改代码中的第5行来获得两种类型的轮廓。

CASE 1 : 情况1 :

I was able to obtain this: 我能够得到这个: 在此输入图像描述

CASE 2 : Now when I change the fifth line in the code segment, I obtain this: 情况2:现在,当我更改代码段中的第五行时,我得到了: 在此输入图像描述 when I invert the binary image ret, thresh = cv2.threshold(img_gray, 127, 255, 1) 当我反转二进制图像ret, thresh = cv2.threshold(img_gray, 127, 255, 1)

This is because in case 1 the contour was found based on this image 这是因为在情况1中 ,基于该图像找到轮廓 在此输入图像描述

Now in case 2 the contour was found based on this image 现在在案例2中 ,基于该图像找到轮廓 在此输入图像描述

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. 我使用此链接获取代码并供参考。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM