栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

在Python中围绕指定的原点旋转2D图像

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

在Python中围绕指定的原点旋转2D图像

如果不能使用OpenCV,则可以使用NumPy(

import numpy as np
)和SciPy(
from scipy importndimage
)通过以下方式围绕所谓的枢轴点进行图像旋转:

  1. 填充图像
    img
    ,使枢轴点位于图像中心,并且图像大小加倍:
    padX = [img.shape[1] - pivot[0], pivot[0]]

    padY = [img.shape[0] - pivot[1], pivot[1]]
    imgP = np.pad(img, [padY, padX], ‘constant’)

(虽然

pivot
此处的图像形状按行-列顺序,但按XY或列-行顺序。您可能需要不同地定义它。)

  1. 围绕图像中心旋转图像(此处旋转角度为45度):
    imgR = ndimage.rotate(imgP, 45, reshape=False)

请注意,由于我们将自己裁剪图像,因此不允许重塑图像。

  1. 裁剪图像,使枢轴点位于其原始位置。因此,我们只需将步骤1的填充反转即可:
    imgC = imgR[padY[0] : -padY[1], padX[0] : -padX[1]]

您可以在以下绘图中看到不同的步骤(原始图像,填充,旋转,裁剪;在(100,300)周围45度)。

将其包装在一个方便的函数中可得出:

def rotateImage(img, angle, pivot):    padX = [img.shape[1] - pivot[0], pivot[0]]    padY = [img.shape[0] - pivot[1], pivot[1]]    imgP = np.pad(img, [padY, padX], 'constant')    imgR = ndimage.rotate(imgP, angle, reshape=False)    return imgR[padY[0] : -padY[1], padX[0] : -padX[1]]

更新资料

对于彩色图像,您必须避免在填充时添加更多通道(第3维为零填充):

imgP = np.pad(img, [padY, padX, [0, 0]], 'constant')

不要忘记对

0
“ before”和“ after”填充都使用a 。否则你会得到一个
ValueError



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/517206.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号