前面使用了kNN算法来识别手写数字,我们是直接把数字的灰度值大小作为特征值来学习。而这里要使用SVM算法,是否也可以使用灰度值来做呢?对于SVM算法来说,可能要采用另外一个特征方式,叫做梯度方向直方图HOG(Histogram of Oriented Gradients)。如果对HOG不是很了解,可以参考下面连接的文章:
https://blog.csdn.net/sinat_34474705/article/details/80219617
在我们计算HOG之前,要做一件事情,就是把所有手写的图片进行角度校正,因此要使用图像的矩计算,并且用它第二项值,所以定义函数deskew()如下:
def deskew(img):
m = cv.moments(img)
if abs(m['mu02']) < 1e-2:
return img.copy()
skew = m['mu11']/m['mu02']
M = np.float32([[1, sk