本次小节学习了图像的变换,主要应用到如下方法: 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: 图像的几何变换的更多相关文章

  1. 【opencv基础】图像的几何变换

    参考 1. 图像的几何变换-平移和镜像: 2.图像的几何变换-缩放和旋转: 3. opencv图像旋转实现: 完

  2. openCV—Python(5)—— 图像几何变换

    一.函数简单介绍 1.warpAffine-图像放射变换(平移.旋转.缩放) 函数原型:warpAffine(src, M, dsize, dst=None, flags=None, borderMo ...

  3. Opencv python图像处理-图像相似度计算

    一.相关概念 一般我们人区分谁是谁,给物品分类,都是通过各种特征去辨别的,比如黑长直.大白腿.樱桃唇.瓜子脸.王麻子脸上有麻子,隔壁老王和儿子很像,但是儿子下巴涨了一颗痣和他妈一模一样,让你确定这是你 ...

  4. opencv python:图像直方图 histogram

    直接用matplotlib画出直方图 def plot_demo(image): plt.hist(image.ravel(), 256, [0, 256]) # image.ravel()将图像展开 ...

  5. opencv python:图像梯度

    一阶导数与Soble算子 二阶导数与拉普拉斯算子 图像边缘: Soble算子: 二阶导数: 拉普拉斯算子: import cv2 as cv import numpy as np # 图像梯度(由x, ...

  6. opencv python:图像金字塔

    图像金字塔原理 expand = 扩大+卷积 拉普拉斯金字塔 PyrDown:降采样 PyrUp:还原 example import cv2 as cv import numpy as np # 图像 ...

  7. opencv python:图像二值化

    import cv2 as cv import numpy as np import matplotlib.pyplot as plt # 二值图像就是将灰度图转化成黑白图,没有灰,在一个值之前为黑, ...

  8. opencv+python实现图像锐化

    突然发现网上都是些太繁琐的方法,我就找opencv锐化函数咋这么墨迹. 直接上代码: kernel = np.array([[0, -1, 0], [-1, 5, -1], [0, -1, 0]], ...

  9. 【图像处理】OpenCV+Python图像处理入门教程(四)几何变换

    这篇随笔介绍使用OpenCV进行图像处理的第四章 几何变换. 4  几何变换 图像的几何变换是指将一幅图像映射到另一幅图像内.有缩放.翻转.仿射变换.透视.重映射等操作. 4.1  缩放 使用cv2. ...

随机推荐

  1. hadoop创建目录文件失败

    mkdir: Cannot create directory /file. Name node is in safe mode.   刚刚在hadoop想创建一个目录的时候,发现报错了 具体信息如下: ...

  2. delphi RichView的使用介绍

    RichView 组件 由 9 个组件模块组成,分别是: 1.TRVStyle:主要是定义RICHVIEW样式,定义后,其它RIHCVIEW都可以引用此样式.  2.TRichView :主要用于显示 ...

  3. 云栖干货回顾 | 云原生数据库POLARDB专场“硬核”解析

    POLARDB是阿里巴巴自主研发的云原生关系型数据库,目前兼容三种数据库引擎:MySQL.PostgreSQL.Oracle.POLARDB的计算能力最高可扩展至1000核以上,存储容量可达100TB ...

  4. C++之内存分区

  5. CSS3:CSS3 渐变(Gradients)

    ylbtech-CSS3:CSS3 渐变(Gradients) 1.返回顶部 1. CSS3 渐变(Gradients) CSS3 渐变(gradients)可以让你在两个或多个指定的颜色之间显示平稳 ...

  6. jvm-多线程

    多线程的目的 为什么要使用多线程?可以简单的分两个方面来说: 在多个cpu核心下,多线程的好处是显而易见的,不然多个cpu核心只跑一个线程其他的核心就都浪费了: 即便不考虑多核心,在单核下,多线程也是 ...

  7. nginx按日分割日志

    #!/bin/bash #按日切割nginx日志并压缩,加入crontab每天0:00切割 #作者:fafu_li #时间: source /etc/profile #加载系统环境变量 source ...

  8. 基于Netty的RPC架构学习笔记(八):protocol buff学习使用

    文章目录 简介 准备 protobuf配置文件 生成java代码 举个

  9. GIT学习记录4(标签管理与自定义git)

    学习参考地址:https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000 本编随笔只是自己对 ...

  10. AtCoder ABC 130F Minimum Bounding Box

    题目链接:https://atcoder.jp/contests/abc130/tasks/abc130_f 题目大意 给定地图上 N 个点的坐标和移动方向,它们会以每秒 1 个单位的速度移动,设 A ...