电脑
python3.6(anaconda)
opencv模块
把图片转化为灰度图。import cv2img = cv2.imread('0.jpg')gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
对灰度图进行二值处理:ret,et = cv2.threshold(gray,230,255,1)
给出一个十字形矩阵:k = cv2.getStructuringElement(cv2.MORPH_CROSS,(6, 6))
用k作为卷积内核,对二值图像进行膨胀处理:d = cv2.dilate(et,k)
提取图片中的轮廓:im,co,h = cv2.findContours( d,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)
提取小轮廓:boxes = []for i in range(len(h[0])): if h[0][i][3] == 0: boxes.append(h[0][i])
提取数字:nm = []for j in range(len(boxes)): if boxes[j][2] != -1: x,y,w,h = cv2.boundingRect(co[boxes[j][2]]) nm.append([x,y,w,h]) #在原图中框选各个数字 img = cv2.rectangle( img,(x-1,y-1), (x+w+1,y+h+1),(0,0,255),2)
本文的代码,参考了冰不语的《OpenCV玩九宫格数独(一)——九宫格图片中提取数字》。
上面,膨胀处理的内核,还可以是别的矩阵,比如方形矩阵、圆形矩阵等,可以参考《特殊矩阵的构造方法》。
提取数字,还需要进行数字识别。冰不语用KNN算法实现了数字识别。