【opencv】图像处理之相似变换、仿射变换、透视变换
■ Similarity Transform(相似变换)
– Similarity Transform(相似变换) = Rotation(旋转) + Translation(平移) + Scale(放缩)
● 性质:Right angle is still right angle (保角性)
代码:
import cv2
import matplotlib.pyplot as plt
import numpy as npimg = cv2.imread('lenna.jpg', 1)
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)# print(img.shape)# 得到相似变换的矩阵 # center:旋转中心 angle:旋转角度 scale:缩放比例
M = cv2.getRotationMatrix2D(center = (img.shape[0]/2,img.shape[1]/2),angle = 30,scale = 0.5) # 原图像按照相似矩阵进行相似变换 三个参数:原图像,相似矩阵,画布面积
img_rotate = cv2.warpAffine(img, M, (img.shape[0], img.shape[1]))plt.figure(figsize=(8,8))
plt.subplot(1,2,1)
plt.imshow(img)
plt.subplot(1,2,2)
plt.imshow(img_rotate)
plt.show()
原图和相似变换后的图像:
■ Affine Transform(仿射变换)
● 性质:Parallel lines are still parallel lines(不再具有保角性,具有保平行性)
● 三个非共线的点对(6 parameters)确定一个仿射变换。
代码:
import cv2
import matplotlib.pyplot as plt
import numpy as np# 3 Src(原始) Points + 3 Dst(目标) Points
# cols:列/长 rows:行/宽img = cv2.imread('lenna.jpg', 1)
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)# print(img.shape)cols = img.shape[0]
rows = img.shape[1]pt1 = np.float32([[0,0], [cols, 0], [0, rows]])
pt2 = np.float32([[cols*0.3, rows*0.3], [cols*0.8, rows*0.2], [cols*0.1, rows*0.9]])# [[0,0], [cols, 0], [0, rows]] --> [[cols*0.3, rows*0.3], [cols*0.8, rows*0.2], [cols*0.1, rows*0.9]]
M = cv2.getAffineTransform(pt1, pt2) # 仿射变换矩阵
dst = cv2.warpAffine(img, M, (cols, rows))plt.figure(figsize=(8,8))
plt.subplot(1,2,1)
plt.imshow(img)
plt.subplot(1,2,2)
plt.imshow(dst)
plt.show()
原图和相似变换后的图像:
■ Perspective Transform(透视/投影变换)
● 性质:Lines are still lines(不保角,不保平行,保直线性)
● 四个非共线的点对(8 parameters)确定一个透视变换。
代码:
import cv2
import matplotlib.pyplot as plt
import numpy as npimg = cv2.imread('lenna.jpg', 1)
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)width = img.shape[1]
height = img.shape[0]pts1 = np.float32([[0,0], [width,0], [0,height], [width,height]])
pts2 = np.float32([[width*0.1,height*0.1], [width*0.9, width*0.1], [height*0.2,height*0.8], [width*0.7,height*0.7]])M_warp = cv2.getPerspectiveTransform(pts1, pts2) # 单应性矩阵
img_warp = cv2.warpPerspective(img, M_warp, (width, height))plt.figure(figsize=(8,8))
plt.subplot(1,2,1)
plt.imshow(img)
plt.subplot(1,2,2)
plt.imshow(img_warp)
plt.show()
原图和透视变换后的图像:
【opencv】图像处理之相似变换、仿射变换、透视变换相关推荐
- halcon opencv 图像处理面试指南
珠海某上市公司算法总监: 1.相机标定的原理与坐标系之间的转换,如何转换 2.激光三角原理,如何搭建 3.测量拟合的过程中有哪些算子,原理什么,接着问5,跌代多少次?什么情况最优,如何优化, 4.那个 ...
- Python OpenCV图像处理 理论 代码
python opencv图像处理 GitHub - LeBron-Jian/ComputerVisionPractice OpenCV计算机视觉学习 & 代码 OpenCV计算机视觉学习(1 ...
- OPENCV图像处理基础
OPENCV图像处理基础 1.图像处理基础 1.1 数字图像 1.1.1 数字图像概念: 1.1.2 数字图像起源: 1.1.3 常见成像方式: 1.1.4 数字图像的应用: 1.1.5 Opencv ...
- Java OpenCV 图像处理04.0 图像形状与文字绘制
Java OpenCV 图像处理04.0 图像形状与文字绘制 Github 代碼地址 OpenCV 仿射变换.透视变换.旋转.平移.缩放 序號 名稱 方法 1 圖像 添加文字 Imgproc.putT ...
- opencv图像处理总结
opencv图像处理基本操作 1. 矩阵数据类型 通用矩阵数据类型: CV_<bit_depth>(S|U|F)C<number_of_channels> 其中,S表示带符号整 ...
- OpenCV图像处理(Python)学习笔记
OpenCV图像处理 OpenCV图像处理 第1章 OpenCV入门 第2章 图像处理基础 2.1 基本表示方法 2.2 感兴趣区域(ROI) 第3章 图像运算 3.1 加法运算 3.2 图像加权和 ...
- OpenCV图像处理基础(变换和去噪)
OpenCV图像处理基础(变换和去噪) 基础知识 使用OpenCV读取图片 图像变换 仿射变换 图像缩放 图像旋转 图像平移 图像裁剪 图像翻转 亮度与对比度变换 图像去噪 高斯噪声 椒盐噪声 中值和 ...
- 免费送书啦!《 OpenCV图像处理入门与实践》一本全搞定
OpenCV 的基础图像操作都只是针对图像中的像素点,并不是直接对图像整体进行的操作.而很多时候并不能仅通过改变像素点来进行图像的操作,为此我们需要学习关于图像的算术操作. 1.图像加法 对于两张相同 ...
- python怎么让x轴45°展示_python opencv实现任意角度的透视变换实例代码
本文主要分享的是一则python+opencv实现任意角度的透视变换的实例,具体如下: # -*- coding:utf-8 -*- import cv2 import numpy as np def ...
- 《OpenCV图像处理》——1.7 用户交互工具
本节书摘来自华章计算机<OpenCV图像处理>一书中的第1章,第1.7节,作者:[西]葛罗瑞亚·布埃诺·加西亚(Gloria Bueno García)著,更多章节内容可以访问云栖社区&q ...
最新文章
- 分享6 个值得收藏的 Python 代码
- 不降低scipy版本解决AttributeError: module ‘scipy.misc‘ has no attribute ‘imresize‘问题
- 【Django】ImportError: cannot import name 'execute_manager'
- commit 规范性提交
- emplode php|,字符串的分割/组合/逆序等
- Jspx.net Framework 6.38发布
- android studio模拟器闪一下,android studio连接雷电模拟器 【AS 模拟器】
- 推荐7款珍藏已久的手机APP,非常实用
- 三星s窗口共享android,使用 S 窗口共享轻松让您的三星手机连接电脑
- JVM 内存分配策略
- linux 充电桩计费模块,充电桩及计费方法与流程
- 《炬丰科技-半导体工艺》ZnO多晶薄膜异质结
- provide和inject 用法
- CVPR2020交互式分割算法IOG的配置(Interactive Object Segmentation with Inside-Outside Guidance)
- 计算机领域模范,喜报 | 我院陆品燕教授获2020年上海市“劳动模范(先进工作者)”称号...
- InvalidOptions: Requested option conflicts with current storage engine option for directoryPerDB
- 同源策略是什么,有何作用
- 春秋狂士狂喷开发文档管理
- 【免费分享】2020-2021年广告营销类行业报告集合(149份)
- gif透明背景动画_BMP、GIF、TIFF、PNG、JPG和SVG格式图像的特点
热门文章
- 移植RTT使用cubeMx配置后出现 cannot open source input file stm32f1xx_hal_exti.h: No such file or directory
- 重绘CButton控件
- 1016.外网资源下载神器
- mysql 字符串取前缀_mysql截取字符串的函数总结
- Linux 多线程应用中如何编写安全的信号处理函数
- linux路由内核实现分析(二)---FIB相关数据结构(4)
- Linux+varnish安装配置
- oracle如何获取自增id,oracle实现自增id
- 【Java数据结构与算法】第一章 稀疏数组和队列
- 用实例的方式去理解storm的并发度