在openCV2 Python中绘制convexHull

在openCV2 Python中绘制convexHull,python,image-processing,ocr,convex-hull,opencv-contour,Python,Image Processing,Ocr,Convex Hull,Opencv Contour,因此,我试图用python从轮廓中绘制凸面,但是当我打印图像时,它并没有改变 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 但是,

因此,我试图用python从轮廓中绘制凸面,但是当我打印图像时,它并没有改变

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
但是,如果我没有包含代码,显示的图像是完全相同的。我在网上查了一下,但似乎找不到答案。
这是一个示例图像:

我使用以下代码为您提供的图像获取凸包:

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()
由于轮廓是基于图像中的白色区域,我通过改变代码中的第5行获得了两种类型的轮廓

案例1:

我能够获得以下信息:

案例2: 现在,当我改变代码段中的第五行时,我得到了这样的结果:当我反转二值图像
ret,thresh=cv2.threshold(img_gray,127255,1)

这是因为在案例1中,轮廓是基于该图像发现的

现在在案例2中根据该图像找到轮廓

如您所见,轮廓是基于二值图像中的白色区域找到的

希望这有帮助


我用来获取代码和参考。

有人知道吗?仍然找不到修复方法。你能上传你正在使用的图像吗?@JeruLuke这是许多图像,每个图像都被阈值化了。我正在创建一个OCR平台,所以每个ROI都是不同的字符。@JeruLuke我刚刚添加了一个示例图像。这就是它通常的样子;不过,字符周围的空白区域扩大了一点。很高兴我能帮上忙。请记住,正如我前面所说的,第5行可以改变你要寻找的轮廓。