利用python进行纸质文档识别(二)轮廓角点探测

本文介绍了一种使用Python和OpenCV进行纸质文档角点探测的方法,通过轮廓探测和尖锐度检测来识别矩形四个角点,避免了Canny算子和Hough变换在表格类型角点探测上的不足。最终,程序能准确找到轮廓的四个顶点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

上次我们发现,只要找到了矩形的四个角点,进行旋转变换后就能够很完美的得到一个横平竖直的矩形。那如何得到四个角点呢?现在比较常见的方式是通过canny算子去探测角点,但是由于角点众多,其实canny算子并不适合表格类型的角点探测。还有一种是通过hough圆变换得到所有直线,然后计算最外围轮廓直线的交点得到角点,但同样的,也因为表格类型的直线较多,且容易在二值化的时候丢失线段,所以处理效果也比较差。
这里介绍另外一种方式去探测角点,先确定最大轮廓,然后在这个轮廓里寻找四个角点。

一、轮廓探测

轮廓探测比较轻松,opencv里有现成的函数cv2.findContours(),但是要注意输入图像只能二值图像。所以我们需要一定的预处理。下面是我预处理和轮廓探测的代码:

	gray_img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # 彩色图像转为灰度图像
    highthreshold,banary_img= cv2.threshold(gray_img, 0, 255, cv2.THRESH_BINARY|cv2.THRESH_OTSU )  
	# 利用自适应阀值转化为二值图像
	# 参数参考http://blog.youkuaiyun.com/on2way/article/details/46812121
    #cv2.findContours()
    contours = cv2.findContours(banary_img,cv2.RETR_LIST,cv2.CHAIN_APPROX_TC89_L1)
    #将探测到的所有轮廓赋值给contours,方法是不压缩轮廓点,方便下面寻找

二、角点探测

角点探测比较麻烦,通过几篇论文和一位大佬的blog,我使用了尖锐度检测的方式求得角点。原理通俗一点就是通过相邻几个点构成的向量计算其半角正弦值,结合近似原则进行近似计算。下面是我的实现。

# =============================================================================
# 点类
# =============================================================================
class Point:
    def __init__(self, point):
        # x1, y1, x2, y2 = l # 前两个数为起点,后两个数为终点
        self.x = point[0]
        self.y = point[1]
        
    def copy(self):
        return self
    
    def toList(self):
        #将点类转化为list类型
        return
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值