代码:
import cv2
import cv2 as cv
import numpy as np
img=cv2.imread('shuzi.jpg',0)
def get_singal(img):
ret0, img0 = cv2.threshold(img, 100, 255, cv2.THRESH_BINARY) # 我需要的是白底黑字,所以最后在img0上截取
ret, img = cv2.threshold(img, 100, 255, cv2.THRESH_BINARY_INV) # 阈值的选取和亮度有关,因为连通域是取白色,所以这里转换为黑底白字
contours, hierarchy = cv.findContours(img, cv.RETR_EXTERNAL,cv.CHAIN_APPROX_SIMPLE) #获得连通域
print(len(contours))
j=0
for i in contours:
x, y, w, h = cv.boundingRect(i)
a=20
brcnt = np.array([[[x - a, y - a]], [[x + w + a, y - a]], [[x + w + a, y + h + a]], [[x - a, y + h + a]]])
cv.drawContours(img0, [brcnt], -1, (0, 255, 0), 2)
img_=img0[y-a:y+h+a,x-a:x+w+a]
cv2.imwrite('number_img/'+str(j)+'.jpg',img_) #截取到的每一个数字都存放在number_img文件夹下面
j+=1
cv2.imshow('img',img0)
cv2.waitKey(0)
if __name__=='__main__':
img = cv2.imread('shuzi.jpg', 0)
get_singal(img)
说明:
针对手写数字识别,制作自己的数据集时,可以采用这个程序实现快速截取。