详解python-图像处理(映射变换)
作者:剑峰随心 时间:2023-12-23 06:43:35
做计算机视觉方向,除了流行的各种深度学习算法,很多时候也要会基础的图像处理方法。
记录下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-图像处理(映射变换)详解整合网站的支持!
来源:https://www.cnblogs.com/bob-jianfeng/p/10574401.html
标签:python,图像处理,映射变换
0
投稿
猜你喜欢
php指定长度分割字符串str_split函数用法示例
2023-07-08 23:25:51
PHP的mysqli_rollback()函数讲解
2023-06-12 08:58:03
详解Python中heapq模块的用法
2022-01-15 05:58:35
Python实现程序的单一实例用法分析
2023-01-08 11:38:14
如何Restore数据库备份文件?
2009-11-02 20:20:00
详解oracle mysql 中的“不等于“ <> != ^= is not
2024-01-25 03:35:08
js的Prototype属性解释及常用方法
2024-06-07 16:00:32
用CSS实现图片等比例缩放
2008-01-18 21:10:00
js实现文字列表无缝滚动效果
2024-04-19 10:16:12
python代码 输入数字使其反向输出的方法
2023-12-15 00:01:22
python为什么要安装到c盘
2023-01-04 13:23:00
简单了解Python字典copy与赋值的区别
2022-07-16 11:35:52
Python使用tkinter制作在线翻译软件
2021-04-19 10:36:06
jquery 使用点滴函数代码
2011-05-21 16:12:00
php实现按照权重随机排序数据的方法
2024-06-07 15:35:53
mysql高级学习之索引的优劣势及规则使用
2024-01-13 16:21:33
Python简单实现词云图代码及步骤解析
2021-05-13 00:25:52
Python如何实现文本转语音
2022-12-23 09:49:22
php获取访问者IP地址汇总
2023-11-14 12:14:06
python 实现手机自动拨打电话的方法(通话压力测试)
2021-03-19 08:10:34