python数字图像处理实现图像的形变与缩放


Posted in Python onJune 28, 2022

skimage的transform模块

图像的形变与缩放,使用的是skimage的transform模块,函数比较多,功能齐全。

1、改变图片尺寸resize

函数格式为:

skimage.transform.resize(image,output_shape)

image: 需要改变尺寸的图片

output_shape: 新的图片尺寸

from skimage import transform,data
import matplotlib.pyplot as plt
img = data.camera()
dst=transform.resize(img, (80, 60))
plt.figure('resize')
plt.subplot(121)
plt.title('before resize')
plt.imshow(img,plt.cm.gray)
plt.subplot(122)
plt.title('before resize')
plt.imshow(dst,plt.cm.gray)
plt.show()

将camera图片由原来的512*512大小,变成了80*60大小。从下图中的坐标尺,我们能够看出来:

python数字图像处理实现图像的形变与缩放

2、按比例缩放rescale

函数格式为:

skimage.transform.rescale(image,scale[,...])

scale参数可以是单个float数,表示缩放的倍数,也可以是一个float型的tuple,如[0.2,0.5],表示将行列数分开进行缩放

from skimage import transform,data
img = data.camera()
print(img.shape)  #图片原始大小 
print(transform.rescale(img, 0.1).shape)  #缩小为原来图片大小的0.1倍
print(transform.rescale(img, [0.5,0.25]).shape)  #缩小为原来图片行数一半,列数四分之一
print(transform.rescale(img, 2).shape)   #放大为原来图片大小的2倍

结果为:

(512, 512)
(51, 51)
(256, 128)
(1024, 1024)

3、旋转 rotate

skimage.transform.rotate(image,angle[,...],resize=False)

angle参数是个float类型数,表示旋转的度数

resize用于控制在旋转时,是否改变大小 ,默认为False

from skimage import transform,data
import matplotlib.pyplot as plt
img = data.camera()
print(img.shape)  #图片原始大小
img1=transform.rotate(img, 60) #旋转90度,不改变大小 
print(img1.shape)
img2=transform.rotate(img, 30,resize=True)  #旋转30度,同时改变大小
print(img2.shape)   
plt.figure('resize')
plt.subplot(121)
plt.title('rotate 60')
plt.imshow(img1,plt.cm.gray)
plt.subplot(122)
plt.title('rotate  30')
plt.imshow(img2,plt.cm.gray)
plt.show()

显示结果:

python数字图像处理实现图像的形变与缩放

4、图像金字塔

以多分辨率来解释图像的一种有效但概念简单的结构就是图像金字塔。图像金字塔最初用于机器视觉和图像压缩,一幅图像的金字塔是一系列以金字塔形状排列的分辨率逐步降低的图像集合。金字塔的底部是待处理图像的高分辨率表示,而顶部是低分辨率的近似。当向金字塔的上层移动时,尺寸和分辨率就降低。

在此,我们举一个高斯金字塔的应用实例,函数原型为:

skimage.transform.pyramid_gaussian(image, downscale=2)

downscale控制着金字塔的缩放比例

import numpy as np
import matplotlib.pyplot as plt
from skimage import data,transform
image = data.astronaut()  #载入宇航员图片
rows, cols, dim = image.shape  #获取图片的行数,列数和通道数
pyramid = tuple(transform.pyramid_gaussian(image, downscale=2))  #产生高斯金字塔图像
#共生成了log(512)=9幅金字塔图像,加上原始图像共10幅,pyramid[0]-pyramid[1]
composite_image = np.ones((rows, cols + cols / 2, 3), dtype=np.double)  #生成背景
composite_image[:rows, :cols, :] = pyramid[0]  #融合原始图像
i_row = 0
for p in pyramid[1:]:
    n_rows, n_cols = p.shape[:2]
    composite_image[i_row:i_row + n_rows, cols:cols + n_cols] = p  #循环融合9幅金字塔图像
    i_row += n_rows
plt.imshow(composite_image)
plt.show()

python数字图像处理实现图像的形变与缩放

python数字图像处理实现图像的形变与缩放

上图,就是10张金字塔图像,下标为0的表示原始图像,后面每层的图像行和列变为上一层的一半,直至变为1

除了高斯金字塔外,还有其它的金字塔,如:

skimage.transform.pyramid_laplacian(image, downscale=2):

python数字图像处理实现图像的形变与缩放

以上就是python数字图像处理实现图像的形变与缩放的详细内容,更多关于python数字图像形变与缩放的资料请关注三水点靠木其它相关文章!

Python 相关文章推荐
pycharm 使用心得(七)一些实用功能介绍
Jun 06 Python
Python简单获取自身外网IP的方法
Sep 18 Python
python实现决策树、随机森林的简单原理
Mar 26 Python
Python实现的简单读写csv文件操作示例
Jul 12 Python
对python调用RPC接口的实例详解
Jan 03 Python
DataFrame:通过SparkSql将scala类转为DataFrame的方法
Jan 29 Python
Python函数参数匹配模型通用规则keyword-only参数详解
Jun 10 Python
Python 实现遥感影像波段组合的示例代码
Aug 04 Python
django基于存储在前端的token用户认证解析
Aug 06 Python
Python使用psutil获取进程信息的例子
Dec 17 Python
python中的selenium安装的步骤(浏览器自动化测试框架)
Mar 17 Python
Python实战之用tkinter库做一个鼠标模拟点击器
Apr 27 Python
在python中读取和写入CSV文件详情
Jun 28 #Python
python数字图像处理之图像的批量处理
如何利用python实现Simhash算法
Jun 28 #Python
python数字图像处理:图像的绘制
python数字图像处理数据类型及颜色空间转换
python数据分析之单因素分析线性拟合及地理编码
python可视化分析绘制带趋势线的散点图和边缘直方图
You might like
实现树状结构的两种方法
2006/10/09 PHP
使用phpQuery获取数组的实例
2017/03/13 PHP
php二维码生成以及下载实现
2017/09/28 PHP
jquery checkbox全选、取消全选实现代码
2010/03/05 Javascript
JQery jstree 大数据量问题解决方法
2010/03/09 Javascript
用js解决数字不能换行问题
2010/08/10 Javascript
js arguments,jcallee caller用法总结
2013/11/30 Javascript
node爬取微博的数据的简单封装库nodeweibo使用指南
2015/01/02 Javascript
jquery.uploadify插件在chrome浏览器频繁崩溃解决方法
2015/03/01 Javascript
JavaScript中用sort()方法对数组元素进行排序的操作
2015/06/09 Javascript
基于jquery实现放大镜效果
2015/08/17 Javascript
javascript中Date format(js日期格式化)方法小结
2015/12/17 Javascript
学习JavaScript设计模式之模板方法模式
2016/01/20 Javascript
如何解决手机浏览器页面点击不跳转浏览器双击放大网页
2016/07/01 Javascript
nodejs简单实现操作arduino
2016/09/25 NodeJs
JS判断两个对象内容是否相等的方法示例
2017/04/10 Javascript
js 两个日期比较相差多少天的实例
2017/10/19 Javascript
JS使用数组实现的队列功能示例
2019/03/04 Javascript
详解Vue.js 作用域、slot用法(单个slot、具名slot)
2019/10/15 Javascript
python实现监控windows服务并自动启动服务示例
2014/04/17 Python
Python 26进制计算实现方法
2015/05/28 Python
Python基于scapy实现修改IP发送请求的方法示例
2017/07/08 Python
Python3多线程操作简单示例
2018/05/22 Python
Python创建字典的八种方式
2019/02/27 Python
Django 配置多站点多域名的实现步骤
2019/05/17 Python
Python安装与基本数据类型教程详解
2019/05/29 Python
6行Python代码实现进度条效果(Progress、tqdm、alive-progress​​​​​​​和PySimpleGUI库)
2020/01/06 Python
Python创建自己的加密货币的示例
2021/03/01 Python
八年级数学教学反思
2014/01/31 职场文书
招股说明书范本
2014/05/06 职场文书
课前一分钟演讲稿
2014/08/26 职场文书
三人合伙协议书范本
2014/10/29 职场文书
红色经典电影观后感
2015/06/18 职场文书
被委托人身份证明
2015/08/07 职场文书
Go 通过结构struct实现接口interface的问题
2021/10/05 Golang
Django + Taro 前后端分离项目实现企业微信登录功能
2022/04/07 Python