opencv实现文档矫正

 更新时间:2022年08月01日 10:52:00   作者:棒子胡豆  
这篇文章主要为大家详细介绍了opencv实现文档矫正功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

本文实例为大家分享了opencv实现文档矫正的具体代码,供大家参考,具体内容如下

原始文档

矫正后文档

思路:

只要获得倾斜文档的倾斜角度,然后通过仿射变化旋转一下就可以实现矫正了,这里获取倾斜角度的方法有两个,下面分别介绍

1、利用霍夫变换,文档内容都是平行的,首先利用利用霍夫变换检测直线,然后将所有直线的平均倾斜角度当做文档的倾斜角度,最后再进行仿射变换就可以了。

import cv2
import numpy as np
def imshow(img):
    cv2.imshow("img",img)
    cv2.waitKey(0)
    cv2.destroyAllWindows()
img = cv2.imread("2.png",1)
img = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY) 
img2 = img.copy()
img_canny = cv2.Canny(img,75,200) 
img_line = cv2.HoughLines(img_canny,1,np.pi/180,280)
average = 0
for line in img_line: 
    for rho,theta in line:
        average = average + theta 
average = average / len(img_line)
angel = average/np.pi * 180 - 90
def rotateImg(img,angel):
    rows, cols = img.shape
    M = cv2.getRotationMatrix2D(((cols - 1) / 2.0, (rows - 1) / 2.0), angel, 1)  # 旋转中心x,旋转中心y,旋转角度,缩放因子
    img = cv2.warpAffine(img, M, (cols, rows),borderValue = (255,255,255))  #在内存里完成了旋转
    imshow(img)
rotateImg(img2,angle)

2、求文档内容的最小包围矩形。首先检测轮廓,利用形态学操作求mask,然后再检测轮廓,求最下包围矩形,最小包围矩形会返回一个倾斜角度(度数,霍夫变换的倾斜角度是弧度制),可以对轮廓进行筛选,将面积最大的轮廓的倾斜角度作为文档的倾斜角度,然后做仿射变换。

import cv2
import numpy as np
def imshow(img):
    cv2.imshow("img",img)
    cv2.waitKey(0)
    cv2.destroyAllWindows()
img = cv2.imread("2.png",1)
img = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY) 
img2 = img.copy()
imgth = cv2.threshold(img,0,255,cv2.THRESH_OTSU|cv2.THRESH_BINARY_INV)[1]
kernel = np.ones((17,17))
img_open = cv2.morphologyEx(imgth,cv2.MORPH_CLOSE,kernel,10)
# imshow(img_open)
cons = cv2.findContours(img_open,cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_NONE)[0]
areas = []
for con in cons:
    area = cv2.contourArea(con)
    areas.append(area)
index = areas.index(max(areas))
# 度数形式,霍夫变换的返回值是弧度制
rect = cv2.minAreaRect(cons[index])
angle = rect[2]
mat = cv2.getRotationMatrix2D((img.shape[1]/2,img.shape[0]/2),angle,1)
img_fin = cv2.warpAffine(img,mat,(img.shape[1],img.shape[0]),borderValue = (255,255,255))
imshow(img_fin)

补充:

利用仿射变换实现图像旋转指定度数

mat = cv2.getRotationMatrix2D(center,angle,c) (center: 旋转中心,angle:旋转角度,c:缩放大小)
img_final = cv2.warpAffine(img,mat, (img.shape[1],img.shape[0]), borderValue = (255,255,255)) (borderValue为可选参数,填充色,默认为黑色)

另外旋转指定90,180,270可以使用transpose、flip来实现

旋转90度(顺时针)
img = cv2.transpose(img)
res_img = cv2.flip(img,1)

旋转180度
img = cv2.flip(img,0)
img = cv2.flip(img,1)

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • python random模块常用函数基础教程

    python random模块常用函数基础教程

    这篇文章主要为大家介绍了python random模块常用函数基础教程,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-06-06
  • Python爬取用户观影数据并分析用户与电影之间的隐藏信息!

    Python爬取用户观影数据并分析用户与电影之间的隐藏信息!

    看电影前很多人都喜欢去 『豆瓣』 看影评,所以我爬取44130条 『豆瓣』 的用户观影数据,分析用户之间的关系,电影之间的联系,以及用户和电影之间的隐藏关系,需要的朋友可以参考下
    2021-06-06
  • Python使用selenium + headless chrome获取网页内容的方法示例

    Python使用selenium + headless chrome获取网页内容的方法示例

    这篇文章主要介绍了Python使用selenium + headless chrome获取网页内容的方法示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-10-10
  • Python实现对字符串的加密解密方法示例

    Python实现对字符串的加密解密方法示例

    这篇文章主要介绍了Python实现对字符串的加密解密方法,结合实例形式分析了Python使用PyCrypto模块进行DES加密解密的相关操作技巧,需要的朋友可以参考下
    2017-04-04
  • Python实现Pig Latin小游戏实例代码

    Python实现Pig Latin小游戏实例代码

    这篇文章主要介绍了Python实现Pig Latin小游戏实例代码,分享了相关代码示例,小编觉得还是挺不错的,具有一定借鉴价值,需要的朋友可以参考下
    2018-02-02
  • python分布式爬虫中消息队列知识点详解

    python分布式爬虫中消息队列知识点详解

    在本篇文章里小编给大家整理的是python分布式爬虫中消息队列知识点详解内容,有兴趣的朋友们可以参考下。
    2020-11-11
  • Python Sqlite3以字典形式返回查询结果的实现方法

    Python Sqlite3以字典形式返回查询结果的实现方法

    下面小编就为大家带来一篇Python Sqlite3以字典形式返回查询结果的实现方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-10-10
  • Python使用openpyxl批量处理数据

    Python使用openpyxl批量处理数据

    openpyxl 是一个用于处理 xlsx 格式Excel表格文件的第三方python库,其支持Excel表格绝大多数基本操作。本文给大家介绍Python使用openpyxl批量处理数据的操作方法,感兴趣的朋友一起看看吧
    2021-06-06
  • Python 一篇文章看懂Python集合与字典数据类型

    Python 一篇文章看懂Python集合与字典数据类型

    集合并不是一种数据处理类型,而是一种中间类型。集合(set)是一个无序、不重复的元素序列,经常被用来处理两个列表进行交并差的处理性。本文将详细讲解集合的一些常用方法,感兴趣的可以了解一下
    2022-03-03
  • python+opencv实现动态物体识别

    python+opencv实现动态物体识别

    这篇文章主要为大家详细介绍了python+opencv实现动态物体识别,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-01-01

最新评论