参考教程:唐宇迪老师: https://www.bilibili.com/video/BV1tb4y1C7j7
1.依然是参数配置
2.文档扫描
程序代码:
# 导入工具包
import numpy as np
import argparse
import cv2
# 设置参数
ap = argparse.ArgumentParser()
ap.add_argument("-i", "--image", required = True,
help = "Path to the image to be scanned")
args = vars(ap.parse_args())
def order_points(pts):
# 一共4个坐标点
rect = np.zeros((4, 2), dtype = "float32")
# 按顺序找到对应坐标0123分别是 左上,右上,右下,左下
# 计算左上,右下
s = pts.sum(axis = 1)#axis = 1,按行相加,左上和右下,相加之和一个最小,一个最大
rect[0] = pts[np.argmin(s)]
rect[2] = pts[np.argmax(s)]
# 计算右上和左下
diff = np.diff(pts, axis = 1) #在行内做差,求梯度,右上y-x最小,左下y-x最大
rect[1] = pts[np.argmin(diff)]
rect[3] = pts[np.argmax(diff)]
return rect
def four_point_transform(image, pts):
# 获取输入坐标点
rect = order_points(pts)
(tl, tr, br, bl) = rect #tl:top and left 左上角开始顺时针的方向
# 计算输入的w和h值
widthA = np.sqrt(((br[0] - bl[0]) ** 2) + ((br[1] - bl[1]) ** 2))#可能是四边形,所以算两个w和两个h
widthB = np.sqrt(((tr[0] - tl[0]) ** 2) + ((tr[1