opencv——几何变换_透视

1、透视变换

#!/usr/bin/env python3
# -*- coding: utf-8 -*-


"""
透视变换
    对于透视变换,我们需要一个3x3变换矩
    构建这个变换矩需要在输入图像上找4个点,以及它们在输出图像上对应的位置
    注意四个点中的任意三个都不能共线。这个变换矩阵可以用函数 cv.getPerspectiveTransform()构建
    然后把这个矩阵传给函数 getPerspectiveTransform(src, dst[, solveMethod]) -> retval
        返回值:透视变换的3x3矩阵
        参数解析:
            src:原图中四点坐标
            dst:目标图像四点坐标
            solveMethod:传递给cv.solve(DecompTypes) 解决一个或多个线性系统或最小二乘问题
             有以下值可选,DECOMP_LU是默认值
                DECOMP_CHOLESKY = 3
                DECOMP_EIG = 2
                DECOMP_LU = 0
                DECOMP_NORMAL = 16
                DECOMP_QR = 4
                DECOMP_SVD = 1

    透视变换函数原型
    warpPerspective(src, M, dsize[, dst[, flags[, borderMode[, borderValue]]]]) -> dst
        参数解析
            M:透视变换的2X4描述矩阵,由函数getPerspectiveTransform得到
            dsize:输出图像的大小(宽,高)
            flags:插值方式有如下插值法可用
                cv.INTER_NEAREST  最邻近插值,将离新像素所在位置最近的像素像素值赋值给新像素
                cv.INTER_LINEAR  双线性插值, x、y方向临近像素取乘以相应权重并相加赋值给i新的像素值
                cv.INTER_CUBIC  双立方插值, 精度更高,计算量最大,取附近十六个点加权取像素值
                cv.INTER_LANCZOS4  附近像素及原像素加权取值
            borderModer:
                BORDER_CONSTANT = 0  以borderValue值填充边界
                BORDER_DEFAULT = 4   镜像填充
                BORDER_REFLECT = 2  镜像填充
                BORDER_REFLECT101 = 4  镜像填充
                BORDER_REPLICATE = 1  拉伸填充
                BORDER_TRANSPARENT = 5  暂时不知道
                BORDER_WRAP = 3  溢出填充
            borderValue:
                边界填充值


"""
import cv2 as cv
import numpy as np

img = cv.imread('./sudoku.jpg')
h, w, c = img.shape
print(h, w)

pts1 = np.float32([(56, 65), (28, 387), (389, 390), (368, 52)])
pts2 = np.float32([(0, 0), (0, h), (w, h), (w, 0)])

M = cv.getPerspectiveTransform(pts1, pts2)
print(M)
dst = cv.warpPerspective(img, M, (w, h))
# dst = cv.warpPerspective(img, M, (int(w), 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值