微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在Python中检测行的倾斜度

如何解决在Python中检测行的倾斜度

我正在创建一个系统,该系统将能够注册将手工手写文本的人员,稍后我将不得不分析此图像并检测书写是上升,下降还是笔直。借助笔迹学,我可以创建该人的个人资料,但是我对如何分析该图像一无所知。

使用Python和Django的系统,我只需要阅读图像即可进行此分析。是否有人建议如何做?

Example of the inclinations

解决方法

一个可能的解决方案是使用minAreaRect()来给您提供角度。掌握了阈值后,只需设定一下阈值即可说明文字是否为['Ascending','Descending','Level']

write = cv2.imread('your_image.png',cv2.IMREAD_COLOR)
write_gray = cv2.cvtColor(write,cv2.COLOR_BGR2GRAY)
ret,thresh = cv2.threshold(write_gray,150,255,cv2.THRESH_BINARY_INV)
# dilate the write
elem = cv2.getStructuringElement(cv2.MORPH_RECT,(4,4),(2,2))
dilat = cv2.dilate(thresh,elem,iterations=1)
contours,hierarchy = cv2.findContours(dilat,cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_SIMPLE)

for cnt in contours:
    if cv2.contourArea(cnt) > 1600: # only keep the writing text
        box = cv2.minAreaRect(cnt)
        (pos,size,angle) = box
        box = cv2.boxPoints(box)
        box = np.int0(box)
        cv2.drawContours(write,[box],(0,0),2)
        angle = angle if size[0] > size[1] else angle + 90
        pos = (cnt[cnt[:,:,0].argmin()][0][0],cnt[cnt[:,1].argmin()][0][1])
        #print(angle)
        if -2 <= angle <= 2:
            cv2.putText(write,'Level',pos,cv2.FONT_HERSHEY_SIMPLEX,0.7,(190,123,68),2)
        elif angle < -2:
            cv2.putText(write,'Ascending',2)
        elif 2 < angle:
            cv2.putText(write,2)

cv2.imshow('resultat',write)

您将看到以下内容: result

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。