初识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. ...
随机推荐
- Redis Desktop Manager可视化工具连接不上redis
1.在centos中启动redis之后,redis进程也是可查的,但是一连接可视化工具就报错: can't connect to redis-server 2.原因分析: ①首先redis是肯定已经开 ...
- 关于元素的offsetHeight、line-htight
最近在做一个自适应高度的加载时的瀑布效果,使用加载完毕后为其一个A容器设置style的高度的方式完成(原高度为0且超出部分裁剪),使用offsetHeight获取其子元素高度(所有子元素高度均相等), ...
- Windows API DOC
{ /* https://docs.microsoft.com/zh-cn/?view=sql-server-ver15 */ }
- Java——方法的重写(覆盖)
2.2方法的重写(覆盖)(override,orverwrite) 2.2.1 什么时候方法要进行重写? 如果父类中的方法已经无法满足当前子类的业务需求,需要将父类中的方法进行重新写一遍.就是要改变父 ...
- JS分支结构与循环结构
1.分支结构 ①if语句 语法结构 if (/* 条件表达式 */) { // 执行语句 } if (/* 条件表达式 */){ // 成立执行语句 } else { // 否则执行语句 } ...
- cucumber:extentreports集成报告
extentreports 测试报告 只支持java..Net 先在pom.xml文件中加入包引用 <!-- report--> <dependency> <groupI ...
- JAVA大数——lightoj1024
要用 System.gc() 清理内存 类必须命名成Main,一些大整数的操作 import java.math.BigInteger; import java.util.Scanner; publi ...
- delphi透明panel组件或者制作方法
//透明Panel控件 unit TranPanel; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, ...
- 几道noip2018提高组初赛的题
以下做法来均自llj @Nicodafagood 一.单项选择题 7. 在一条长度为 1 的线段上随机取两个点,则以这两个点为端点的线段的期望 长度是( ).A. 1 / 2B. 1 / 3C. 2 ...
- 双目立体匹配经典算法之Semi-Global Matching(SGM)概述:视差计算、视差优化
文章目录 视差计算 视差优化 剔除错误匹配 提高视差精度 抑制噪声 视差计算 在SGM算法中,视差计算采用赢家通吃(WTA)算法,每个像素选择最小聚合代价值所对应的视差值作为最终视差,视差计算的结 ...