初识OpenCV-Python - 006: 图像的几何变换
本次小节学习了图像的变换,主要应用到如下方法: cv2.resize(), cv2.warpAffine(), cv2.getRotationMatrix2D(), cv2.getAffineTransform(), cv2.getPerspectiveTransform(), cv2.warpPerspective().
#scale
img = cv2.imread('woman.jpg')
cv2.imshow('img',img)
cv2.waitKey(0)
cv2.destroyAllWindows()
'''
cv2.resize(inputArray src, OutputArray dst, Size, fx, fy, interpolation)
InputArray src: 输入图片
OutputArray dst: 输出图片
Size: 输出图片尺寸
fx, fy: 沿x轴,y轴的缩放系数
interpolation: 插入方式
interpolation 的值为:
INTER_NEAREST: 最近邻插值
INTER_LINEAR: 双线性插值
INTER_AREA: 使用像素区域关系进行重采样
INTER_CUBIC: 4*4像素邻域的双三次插值
INTER_LANCZOS4: 8*8像素邻域的Lanczos插值
'''
res = cv2.resize(img, None, fx=2,fy=2,interpolation=cv2.INTER_CUBIC)
cv2.imshow('dst',res)
cv2.waitKey(0)
cv2.destroyAllWindows()
#OR
height, width=img.shape[:2]
res = cv2.resize(img, (2*width,2*height),interpolation=cv2.INTER_CUBIC)
cv2.imshow('dst1',res)
cv2.waitKey(0)
cv2.destroyAllWindows()
#Tranlation or Rotation
img = cv2.imread('ball.png',0)
rows, cols = img.shape
M = np.float32([[1,0,100],[0,1,50]])
'''
cv2.getRotationMatrix2D(Point2f center, double angle, double scale):图像旋转
Point2f center: 表示旋转的中心点
double angle: 表示旋转的角度
double scale:图像缩放的因子
'''
#M = cv2.getRotationMatrix2D((cols/2,rows/2),90,1)
'''
cv2.warpAffine(src, M, dsize[,dst[,flags[,borderModel[, borderValue]]]]
src: 输入图像
M: 变换矩阵[仿射变化矩阵,一般反应平移或旋转的关系,为2*3变换矩阵]
dsize: 输出图像的大小
flags: 插值方法的组合[值与上述的interpolation一样]
borderModel: 边界像素模式
borderValue: 边界填充值。默认0
'''
dst = cv2.warpAffine(img,M,(cols,rows))
cv2.imshow('dst',dst)
cv2.waitKey(0)
cv2.destroyAllWindows()
#透视
img = cv2.imread('man.jpg')
rows, cols, ch = img.shape
pts1 = np.float32([[56,65],[368,52],[28,387],[389,390]])
pts2 = np.float32([[0,0],[300,0],[0,300],[300,300]])
'''
getPerspectiveTransform(const CvPoint2D32f *src, const CvPoint2D32f *dst, CvMat *map_matrix)[由四对点计算透视变换]
src: 输入图像的四边形顶点坐标
dst: 输出图像的相应的四边形顶点坐标
map_matrix: 指向3*3输出矩阵的指针
'''
M = cv2.getPerspectiveTransform(pts1,pts2)
'''
warpPerspective(const CvArr* src, CvArr* dst, const CvMat* map_matrix, int flags=CV_INTER_LINEAR+CV_WARP_FILL_OUTLIERS, CvScalar fillval=cvScalarAll(0)):对图像进行透视变换
src: 输入图像
dst: 输出图像
map_matrix: 3*3变换矩阵
flags:插值方法[CV_WARP_FILL_OUTLIERS:填充所有缩小图像的像素。
CV_WARP_INVERSE_MAP:指定matrix是输出图像到输入图像的反变换。
fillval用于填充边界外的值]
'''
dst = cv2.warpPerspective(img,M,(300,300))
plt.subplot(121),plt.imshow(img),plt.title('Input')
plt.subplot(122),plt.imshow(dst),plt.title('Output')
plt.show()
初识OpenCV-Python - 006: 图像的几何变换的更多相关文章
- 【opencv基础】图像的几何变换
参考 1. 图像的几何变换-平移和镜像: 2.图像的几何变换-缩放和旋转: 3. opencv图像旋转实现: 完
- openCV—Python(5)—— 图像几何变换
一.函数简单介绍 1.warpAffine-图像放射变换(平移.旋转.缩放) 函数原型:warpAffine(src, M, dsize, dst=None, flags=None, borderMo ...
- Opencv python图像处理-图像相似度计算
一.相关概念 一般我们人区分谁是谁,给物品分类,都是通过各种特征去辨别的,比如黑长直.大白腿.樱桃唇.瓜子脸.王麻子脸上有麻子,隔壁老王和儿子很像,但是儿子下巴涨了一颗痣和他妈一模一样,让你确定这是你 ...
- opencv python:图像直方图 histogram
直接用matplotlib画出直方图 def plot_demo(image): plt.hist(image.ravel(), 256, [0, 256]) # image.ravel()将图像展开 ...
- opencv python:图像梯度
一阶导数与Soble算子 二阶导数与拉普拉斯算子 图像边缘: Soble算子: 二阶导数: 拉普拉斯算子: import cv2 as cv import numpy as np # 图像梯度(由x, ...
- opencv python:图像金字塔
图像金字塔原理 expand = 扩大+卷积 拉普拉斯金字塔 PyrDown:降采样 PyrUp:还原 example import cv2 as cv import numpy as np # 图像 ...
- opencv python:图像二值化
import cv2 as cv import numpy as np import matplotlib.pyplot as plt # 二值图像就是将灰度图转化成黑白图,没有灰,在一个值之前为黑, ...
- opencv+python实现图像锐化
突然发现网上都是些太繁琐的方法,我就找opencv锐化函数咋这么墨迹. 直接上代码: kernel = np.array([[0, -1, 0], [-1, 5, -1], [0, -1, 0]], ...
- 【图像处理】OpenCV+Python图像处理入门教程(四)几何变换
这篇随笔介绍使用OpenCV进行图像处理的第四章 几何变换. 4 几何变换 图像的几何变换是指将一幅图像映射到另一幅图像内.有缩放.翻转.仿射变换.透视.重映射等操作. 4.1 缩放 使用cv2. ...
随机推荐
- 微信小程序自定义导航栏组件,完美适配所有手机,可实现各种功能和情况
背景 在做小程序时,关于默认导航栏,我们遇到了以下的问题: Android.IOS 手机对于页面 title 的展示不一致,安卓 title 的显示不居中 页面的 title 只支持纯文本级别的样式控 ...
- cdq分治·三维偏序问题
转载自FlashHu大佬的博客CDQ分治总结(CDQ,树状数组,归并排序),在讲述部分有部分删改,用了自己的代码 CDQ分治的思想 CDQ分治是基于时间的离线分治算法.这一类分治有一个重要的思想——用 ...
- mybatis 处理CLOB/BLOB类型数据
BLOB和CLOB都是大字段类型. BLOB是按二进制来存储的,而CLOB是可以直接存储文字的. 通常像图片.文件.音乐等信息就用BLOB字段来存储,先将文件转为二进制再存储进去.文章或者是较长的文字 ...
- CentOS增加swap分区大小
来自:http://www.centoscn.com/CentOS/Intermediate/2014/0222/2446.html 1. 查看当前分区情况 free -m 2. 增加 swap 大小 ...
- 【转】详解tomcat的连接数与线程池
对tomcat线程池.Connector的BIO.NIO解析的很透彻的一篇文章. 原文链接:https://www.cnblogs.com/kismetv/p/7806063.html 前言 在使用t ...
- SVG动画制作工具 , 从此抛弃臃肿的gif
VG简介 只要是程序员的你,你不得不知道svg图片,它可以无限任意放大拉伸都不会损失画质,就像系统字体一样可以无限矢量放大,svg更高级是可以用来制作矢量动画,现在各大浏览器和系统基本对svg已经支持 ...
- Centos6.5离线安装gcc
木有网的centos折腾起来简直费劲的不要不要的~ 学校的虚拟机最开始只安装了一个libgcc-4.4.7-4,然而这是不够用的,比如安装软件的时候,需要输入"./configure&quo ...
- mysql 04_章基本查询
当我们使用select查询语句向数据库发送一个查询请求,数据库会根据请求执行查询,并返回一个虚拟表,其数据来源于真实的数据表. 一.查询所有数据:所有的字段.所有的记录 格式:SELECT * FRO ...
- 随笔记录 Linux基本操作命令 2019.7.27
临时关闭防火墙systemctl stop firewalld永久关闭防火墙systemctl disable firewalld 临时关闭selinux安全机制setenforce 0永久关闭sel ...
- Python学习笔记(五)——异常处理
Python 异常总结 异常名称 解释 AssertionError 断言语句(assert)失败:当assert关键字后边的条件为假时,程序将抛出该异常,一般用于在代码中置入检查点 OSError ...