基于OpenCV4.x + Python3.7的文件扫描件切边实践

本文介绍了如何使用OpenCV和Python进行扫描件切边处理,包括边缘检测、孔洞填充、最大连通域获取、霍夫直线检测、拟合直线求交点、仿射变换等步骤,适用于边缘整齐和不整齐的扫描件。
摘要由CSDN通过智能技术生成

    之前用Matlab做图像较多,最近准备学习用opencv和python进行图像处理,并就网上的实际案例进行了练手,其中的一篇扫描件切边案例是:opencv之案例实战-扫描件切边仅当作学习,不喜勿喷!

    本文链接:基于OpenCV4.x + Python3.7的文件扫描件切边实践

    测试图像两种:(1)边缘整齐+倾斜;(2)边缘添加干扰+倾斜。具体图像如下所示。

整齐不

1.具体思路

(1)边缘检测后进行孔洞填充,得到初始文件区域(包含其他连通域);

(2)取最大的连通域作为文件区域,此时其他连通域已被过滤去除;

(3)霍夫直线检测,以kmeans方法挑选出4类直线;

(4)4条筛选出的直线求交点,并以此对原图做仿射变换,得到校正后的图像;

(5)用上面的4个交点求仿射变换后的4个新点坐标,并以此切边获得最终结果图像

2.实现过程

2.1 边缘检测+孔洞填充

    采用canny边缘检测,该算子以及用法在此不用详述;孔洞填充,opencv和python好像还没有可以直接用的函数(可能我还没发现,可以补充),孔洞填充函数如下,其中用到了cv.floodFill自带函数。(fillimg()是借鉴别人的,链接不知道了,下次碰见附上链接):

import cv2 as cv
import numpy as np

def fillimg(img):
    
    img1 = img.copy()
    h,w = img.shape[:2]
    
    mask = np.zeros((h+2,w+2),np.uint8)
    cv.floodFill(img1,mask,(0,0),255)
    
    img2 = cv.bitwise_not(img1)   #取反
    out = img|img2   # 或操作
    
    return out

   该过程实现如下:

gray = cv.cvtColor(img,cv.COLOR_BGR2GRAY)
edge = cv.Canny(gray,th,2*th)  #canny边缘检测

ele = cv.getStructuringE
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值