在寻找手写数字的项目中,一些数字轮廓周围的空间很小,并且被忽略,在它们之间几乎没有空间的轮廓周围不会形成矩形
具有阈值的图像
在第二幅图像中,它被视为一个轮廓,忽略0
这是我的密码
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)
目前没有回答
相关问题 更多 >
编程相关推荐