前言:
使用过的同学知道app——扫描xx王有个功能是将图片转化pdf,通过将手机相机拍到的图片转换为pdf,这款app能将手机拍到的照片多余的空白部分减去。本文讲述这个功能实现的部分原理。即实现本文的两张图片变换。
参考链接:https://zhuanlan.zhihu.com/p/37023649
-
转化的图片如下,将上面的图片转化为下图
-
本次使用的环境
system: win11
software: opencv-python == 3.4.2.16
opencv-contrib-python == 3.4.2.16
environment:python3.6
3.需要的准备工作,找到原始图片我们需要变换的四个坐标
即下图四个坐标
4.
代码如下
import numpy as np
from cv2 import cv2
if __name__ == '__main__':
# 读取原始图片
img1_path = r"ori.png"
img1 = cv2.imread(img1_path)
# 获得图片的高度与宽度
height, weight = img1.shape[:2]
# 定义我们要透视变换的点,即上面图的四个点 分别是原图的 左上 右上 左下 右下, 注意需要将四个点的坐标转换成float32
points_ori = np.array([[13, 14], [312, 8], [24, 393], [304, 410]]).astype(np.float32)
# 定义我们将图片展平的点,本次展平为一张图片
points_transform = np.array([[0, 0], [300, 0], [0, 380], [300, 380]]).astype(np.float32)
# 计算得到转化矩阵 输入的参数分别是原图像的四边形坐标 变换后图片的四边形坐标
M = cv2.getPerspectiveTransform(points_ori, points_transform)
#得到透视变换的图片
img_ = cv2.warpPerspective(img1,M,(300,380))
#将图片保存即可得到2图