如何增加每个轮廓周围的填充

2024-10-03 06:23:47 发布

您现在位置:Python中文网/ 问答频道 /正文

在寻找手写数字的项目中,一些数字轮廓周围的空间很小,并且被忽略,在它们之间几乎没有空间的轮廓周围不会形成矩形

具有阈值的图像

1

在第二幅图像中,它被视为一个轮廓,忽略0

second

这是我的密码

images = cv2.imread("l.jpeg")
images = imutils.resize(images,width=320)
gray = cv2.cvtColor(images,cv2.COLOR_BGR2GRAY)

kernel = cv2.getStructuringElement(cv2.MORPH_RECT,(5,5))
blackhat = cv2.morphologyEx(gray,cv2.MORPH_BLACKHAT,kernel)    

_,thresh = cv2.threshold(blackhat,0,255,cv2.THRESH_BINARY|cv2.THRESH_OTSU)
thresh = cv2.dilate(thresh,None)    

(cnts,_) = cv2.findContours(thresh.copy(),cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_SIMPLE)

avgcntarea = np.mean([cv2.contourArea(k) for k in cnts])

print(avgcntarea/10)
digits = []
boxes = []    

for (i,c) in enumerate(cnts):
    
    if cv2.contourArea(c)<avgcntarea/3.5:
        continue
    
    mask = np.zeros(gray.shape,dtype="uint8")                        
    (x,y,w,h) = cv2.boundingRect(c)                        
    hull = cv2.convexHull(c)                        
    cv2.drawContours(mask,[hull],-1,255,-1)                      
                    
    mask = cv2.bitwise_and(thresh,thresh,mask=mask)                        
    digit = mask[y-8:y+h+8,x-8:x+w+8]                        
    digit = cv2.resize(digit,(28,28))
                    
    boxes.append((x,y,w,h))                        
    digits.append(digit)    

lists = []
classifier = tf.keras.models.load_model("model/ourModel.h5")  
classifier.summary()
  
digits = np.array(digits)
digits = digits.reshape(digits.shape[0],28,28,1)
labels = classifier.predict_classes(digits)    

cv2.imshow("Original",images)
cv2.imshow("Thresh",thresh)
for (x,y,w,h),label in sorted(zip(boxes,labels)):
    cv2.rectangle(images,(x,y),(x+w,y+h),(0,0,255),1)
    cv2.putText(images,str(label),(x+2,y-5),cv2.FONT_HERSHEY_SIMPLEX,1.0,(0,255,0),2)
    cv2.imshow("Recognized",images)
    lists.append(str(label))
    
    cv2.waitKey(0)

cv2.destroyAllWindows()
   

print("recognized digits are :",lists)

Tags: infornpmaskcv2轮廓imagesdigit