详解python-图像处理(映射变换)

 更新时间:2019年03月22日 09:38:44   作者:剑峰随心  
这篇文章主要介绍了python-图像处理(映射变换),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

做计算机视觉方向,除了流行的各种深度学习算法,很多时候也要会基础的图像处理方法。

记录下opencv的一些操作(图像映射变换),日后可以方便使用

先上一张效果图

图二和图三是同一种方法,只是变换矩阵不同,都是3点映射变换

图四使用的是4点映射变换

简单介绍下原理

图像都知道是3维(通道)的矩阵,前两维就是由1字节(0-255)数字填充的二维数组。数字大小代表颜色的深浅。

我们把变换前的原图作为x和y。变换后的图为u和v。将[x,y,1]乘上变换矩阵就可以得到对应的新的u和v。不同的变换矩阵有不同的作用(不同的变换方式)

所以现在就是求不同变换对应的不同的变换矩阵的过程

求这个矩阵 在opencv中直接就有方法

只需提供原图的三个点和你要变换之后的三个点的映射位置(3个原图点,3个映射点)就可以求出这个变换矩阵

当然了 你会发现不管怎么调整映射点 都不能任意变换

因为只给三个点时 变换之后的图其实只是原图的等比缩放,并不能做到随意映射的效果

这里opencv也提供了 四个点和四个映射的方法 求出对应的变换矩阵 ,最终得到任意映射的效果

代码如下:

# coding=gbk
import cv2
import numpy as np
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签
plt.rcParams['axes.unicode_minus']=False #用来正常显示负号

img=cv2.imread(r"test6.jpg")
img = img[:,:,[2,1,0]]
cols,rows,ch=img.shape

pts1 = np.float32([[0, 0], [cols - 1, 0], [0, rows - 1]])         #三点映射
pts2 = np.float32([[0, 0], [cols - 1, 0], [80, rows - 1]])
pts21 = np.float32([[0, 0], [cols - 1, 0], [0, rows - 1]])
pts22 = np.float32([[cols * 0.2, rows * 0.1], [cols * 0.9, rows * 0.2], [cols * 0.1, rows * 0.9]])
pts31 = np.float32([[0, 0], [cols - 1, 0], [0, rows - 1],[cols - 1,rows-1]])    #四点映射
pts32 = np.float32([[0, 0], [cols - 1, 0], [50, rows - 1],[cols - 50,rows-50]])

M = cv2.getAffineTransform(pts1,pts2)              #求三点映射的变换矩阵
M2= cv2.getAffineTransform(pts21,pts22)
M3 = cv2.getPerspectiveTransform(pts31,pts32)            #求四点映射的变换矩阵

dst = cv2.warpAffine(img,M,(rows+120,cols))            #三点映射的变换函数
dst2 = cv2.warpAffine(img,M2,(rows,cols))            
dst3 = cv2.warpPerspective(img,M3,(rows+40,cols+50))          #四点映射的变换函数

plt.subplot(221)
plt.imshow(img)
plt.title("原图")
plt.subplot(222)
plt.imshow(dst)
plt.title("投影变换")
plt.subplot(223)
plt.imshow(dst2)
plt.title("仿射原图变换")
plt.subplot(224)
plt.imshow(dst3)
plt.title("仿射不规则变换")

plt.show()

以上所述是小编给大家介绍的python-图像处理(映射变换)详解整合,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!

相关文章

  • go和python变量赋值遇到的一个问题

    go和python变量赋值遇到的一个问题

    这篇文章主要介绍了go和python变量赋值遇到的一个问题的相关资料,需要的朋友可以参考下
    2017-08-08
  • linux系统使用python监测系统负载脚本分享

    linux系统使用python监测系统负载脚本分享

    这篇文章主要介绍了linux系统使用python监测系统负载脚本,大家参考使用吧
    2014-01-01
  • python+pytest接口自动化参数关联

    python+pytest接口自动化参数关联

    这篇文章主要介绍了python+pytest接口自动化参数关联,参数关联,也叫接口关联,即接口之间存在参数的联系或依赖,更多相关内容需要的小伙伴可可以参考一下
    2022-06-06
  • Python的Flask框架中实现简单的登录功能的教程

    Python的Flask框架中实现简单的登录功能的教程

    这篇文章主要介绍了Python的Flask框架中实现简单的登录功能的教程,登录是各个web框架中的基础功能,需要的朋友可以参考下
    2015-04-04
  • Python的Flask框架中集成CKeditor富文本编辑器的教程

    Python的Flask框架中集成CKeditor富文本编辑器的教程

    在用Flask搭建网站时的后台文章编辑器可以使用CKeditor,CKeditor所支持的文本样式较多且开源,这里我们就来看一下Python的Flask框架中集成CKeditor富文本编辑器的教程
    2016-06-06
  • Pygame显示文字的实现示例

    Pygame显示文字的实现示例

    本文主要介绍了Pygame显示文字的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-02-02
  • python常用数据结构元组详解

    python常用数据结构元组详解

    这篇文章主要介绍了python常用数据结构元组详解,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的小伙伴可以参考一下
    2022-08-08
  • python实现GATK多线程加速示例

    python实现GATK多线程加速示例

    这篇文章主要为大家介绍了python实现GATK多线程加速示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-07-07
  • python实现在windows服务中新建进程的方法

    python实现在windows服务中新建进程的方法

    这篇文章主要介绍了python实现在windows服务中新建进程的方法,涉及Python针对Windows服务与进程操作的相关技巧,需要的朋友可以参考下
    2015-06-06
  • python中time库使用详解

    python中time库使用详解

    time库是python中处理时间的标准库,下面这篇文章主要给大家介绍了关于python中time库使用的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-06-06

最新评论