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

 更新时间:2022年06月28日 16:28:16   作者:denny402  
这篇文章主要为大家介绍了python数字图像处理实现图像的形变与缩放示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

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大小。从下图中的坐标尺,我们能够看出来:

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()

显示结果:

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()

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

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

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

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

相关文章

  • python使用sessions模拟登录淘宝的方式

    python使用sessions模拟登录淘宝的方式

    这篇文章主要介绍了python使用sessions模拟登录淘宝的方式,本文给大家介绍的非常详细,具有一定的参考借鉴价值 ,需要的朋友可以参考下
    2019-08-08
  • Python3enumrate和range对比及示例详解

    Python3enumrate和range对比及示例详解

    这篇文章主要介绍了Python3enumrate和range对比及示例详解,在Python中,enumrate和range都常用于for循环中,enumrate函数用于同时循环列表和元素,而range()函数可以生成数值范围变化的列表,而能够用于for循环即都是可迭代的,需要的朋友可以参考下
    2019-07-07
  • python通过opencv调用摄像头操作实例分析

    python通过opencv调用摄像头操作实例分析

    在本篇文章里小编给大家整理的是一篇关于python通过opencv调用摄像头操作实例分析内容,有兴趣的朋友们可以学习下。
    2021-06-06
  • 深入理解Python虚拟机之进程、线程和协程区别详解

    深入理解Python虚拟机之进程、线程和协程区别详解

    在本篇文章当中深入分析在 Python 当中 进程、线程和协程的区别,这三个概念会让人非常迷惑,如果没有深入了解这三者的实现原理,只是看一些文字说明,也很难理解,在本篇文章当中我们将通过分析部分源代码来详细分析一下这三者根本的区别是什么,需要的朋友可以参考下
    2023-10-10
  • python 无损批量压缩图片(支持保留图片信息)的示例

    python 无损批量压缩图片(支持保留图片信息)的示例

    这篇文章主要介绍了python 无损批量压缩图片的示例,帮助大家更好的利用python处理图片,感兴趣的朋友可以了解下
    2020-09-09
  • Python3 Click模块的使用方法详解

    Python3 Click模块的使用方法详解

    这篇文章主要介绍了Python3 Click模块的使用方法详解,需要的朋友可以参考下
    2020-02-02
  • pygame实现俄罗斯方块游戏(AI篇2)

    pygame实现俄罗斯方块游戏(AI篇2)

    这篇文章主要为大家详细介绍了pygame实现俄罗斯方块游戏AI的第2篇,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-10-10
  • pycharm如何添加解释器

    pycharm如何添加解释器

    这篇文章主要介绍了pycharm如何添加解释器问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-08-08
  • pycharm通过ssh远程连接服务器并运行代码详细图文

    pycharm通过ssh远程连接服务器并运行代码详细图文

    在运行项目的过程中,由于自己电脑GPU不够,通常需要将项目放到服务器上运行,这时就会遇到如何将pycharm和服务器进行连接,下面这篇文章主要给大家介绍了关于pycharm通过ssh远程连接服务器并运行代码的相关资料,需要的朋友可以参考下
    2024-03-03
  • python配置文件写入过程详解

    python配置文件写入过程详解

    这篇文章主要介绍了python配置文件写入过程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-10-10

最新评论