OpenCV 图片旋转

这篇具有很好参考价值的文章主要介绍了OpenCV 图片旋转。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

OpenCV 图片旋转的两个函数

  1. cv2.getRotationMatrix2D 获得仿射变化矩阵
  2. cv2.warpAffine 进行仿射变化

getRotationMatrix2D 获得仿射变化矩阵(warpAffine 方法的重要参数)

rot_mat =  cv2.getRotationMatrix2D(center, -5, 1)

参数说明:

  • center 表示中间点的位置
  • -5 表示逆时针旋转5度,
  • 1 表示进行等比列的缩放
    返回值:
    rot_mat 仿射变化矩阵
    例如:
    OpenCV 图片旋转

warpAffine 进行仿射变化

img_rotated_by_alpha = cv2.warpAffine(img, rot_mat, (img.shape[1], img.shape[0]))

参数说明:

  • img 表示输入的图片,
  • rot_mat 表示仿射变化矩阵,
  • (image.shape[1], image.shape[0]) 表示变换后的图片大小,image.shape[1]表示宽,image.shape[0]表示高

返回值:
旋转后的图像

代码说明:

第一步:读入图片,进行图片展示

第二步:获取图片的宽、长、通道数,构造[0, 0, w, h]列表,然后用该列表实列化一个bbox对象(用于计算中心点)

第三步:计算其center值,将其代入到cv2.getRotationMatrix2D生成仿射变化矩阵

第四步:使用cv2.warpAffine(img, rot_mat, (img.shape[1], img.shape[0])) 获得仿射变化以后的图像

第五步:如果计算源图像上的某点,位于转换后图像的位置。如果是源图片上的一个点,那么经过变化以后的坐标值为
(rot_mat[0][0] * x + rot_mat[0][1] * y + rot_mat[0][2], rot_mat[1][0] * x + rot_mat[1][1] * y + rot_mat[1][2]

第六步:进行旋转图片展示,为了保证,这里也可以进行截图操作

import cv2
import numpy as np

class BBox(object):

    def __init__(self, bbox):
        self.left = bbox[0]
        self.top = bbox[1]
        self.right = bbox[2]
        self.bottom = bbox[3]


img = cv2.imread('0001.jpg')
cv2.imshow('img', img)   # 显示图像
cv2.waitKey(0)
h, w, c = img.shape  # 图像的高,宽,通道;注意:OpenCV 先获得高!然后是宽和通道。
box = [0, 0, w, h]   # 创建一个列表,共4项,前两项表示原点,第三项为宽,第四项为高
bbox = BBox(box)     # 创建BBox对象


center = ((bbox.left + bbox.right) / 2, (bbox.top + bbox.bottom) / 2)  # 计算中心点
rot_mat = cv2.getRotationMatrix2D(center, -5, 1)	# 仿射变化矩阵
img_rotated_by_alpha = cv2.warpAffine(img, rot_mat, (img.shape[1], img.shape[0]))  
# rot_mat 仿射变化矩阵,warpAffine的重要参数
# img.shape[1]为图像宽度,img.shape[0]为图像高度 img为OpenCV变量

# 获得图片旋转以后的关键点的位置
# lanmark_ = np.asarray([(rot_mat[0][0] * x + rot_mat[0][1] * y + rot_mat[0][2],
#                         rot_mat[1][0] * x + rot_mat[1][1] + rot_mat[1][2]) for (x, y) in landmark])

cv2.imshow('img_rotated', img_rotated_by_alpha) # 显示旋转后的图像
cv2.waitKey(0)

# face = img_rotated_by_alpha[bbox.top:bbox.bottom + 1, bbox.left:bbox.right + 1]
#
# cv2.imshow('face', face)
# cv2.waitKey(0)


# 注意 该代码在Jupyter Notebook运行时有bug

OpenCV 图片旋转
原始图像
OpenCV 图片旋转
旋转后图像

关于img.shape[0]、[1]、[2]到底代表什么

img.shape[0]:图像的垂直尺寸(高度)
img.shape[1]:图像的水平尺寸(宽度)
img.shape[2]:图像的通道数

在矩阵中,[0]就表示行数,[1]则表示列数。文章来源地址https://www.toymoban.com/news/detail-453420.html

到了这里,关于OpenCV 图片旋转的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • python 根据两个向量,求的之间的旋转矩阵:

    项目遇到一个问题,就是需要根据 原始向量 和 目标向量 求他们两个之间的 旋转矩阵 ,网上结果很少,也有很多错误,因此写了一个,项目中使用过程没出现问题。         原理参考的是知乎大佬的对   Rodrigues\\\' rotation formula  和 知乎 的总结,主要如下:

    2024年02月13日
    浏览(27)
  • 全网最全!!Qt实现图片旋转及图片旋转动画的几种方式

    第一种方案 使用 QPixmap 的 transformed 函数来实现旋转,这个函数默认是以图片中心为旋转点,不能设置旋转的中心点,使用如下: 第二种方案 使用 QPainter 这位“画家”,示例程序如下:  一、借助QPixmap实现旋转动画 第二种方案 使用 QPainter 这位“画家”,示例程序如下:

    2024年02月11日
    浏览(32)
  • C#实现图片对比-支持图片旋转

    虽然已经正式转JAVA了,但最近发现一个特别好的开源项目masuit,不仅提供很多简便的功能,还有图像的一些特殊操作功能。 之前我们比较图片应该都是使用的openCV,不过这个masuit,看上去也不错,而且代码使用简单,因此强烈推荐。 下面就实现一个简单图像对比。 首先添加

    2024年03月09日
    浏览(58)
  • css 3d旋转图片(css旋转木马)(详细教程)

    接下来开始制作旋转 老婆 图片 先准备好html骨架(后面为了挨个测试可以先把后面5个div注释掉) 预定义好css样式 效果图(所有的div叠加在了一起): 为body设置深景(相当于一个镜头,距离屏幕的距离) 为大盒子和设置旋转旋转中心+子元素3d属性: 为大盒子添加过渡样式,使

    2024年02月05日
    浏览(62)
  • 微信小程序做一个圆形图片旋转可以控制开始和结束-音乐播放器的图片旋转功能

    1.在 WXML 文件中添加一个 标签,并设置图片的 src 和样式,并为其绑定一个 animation 用来控制旋转动画。 2.在 WXSS 文件中添加样式,将图片设置为圆形并居中显示。 3.在 JS 文件中定义旋转动画对象和控制方法。 4.在 WXML 文件中添加按钮来触发开始和结束旋转动画。 在以上步骤

    2024年02月16日
    浏览(32)
  • 前端小练习:案例4.3D图片旋转展示(旋转木马)

    1.实现旋转木马效果的第一步是先准备好自己需要的图片,创建html文件 2.旋转木马的实现,关键点在3D形变和关键帧动画。 3.步骤,定义一个div使其居中,,把图片放进div盒子里,因为图片需要3D形变,所以要给div设置3D环境,给图片设置定位或者使用弹性布局使其在相对的位

    2024年02月14日
    浏览(32)
  • Pygame中实现图片旋转

    在Pygame中实现图片的移动_pygame实现图片移动-CSDN博客中我们实现了一个移动的大猩猩,接下来在该程序的基础上实现大猩猩图片的旋转,也就是点击了鼠标后,大猩猩旋转一周,之后继续移动。 首先为Chimp类也就是大猩猩类添加旋转的方法,代码如图1所示。 图1 Chimp类的旋转

    2024年02月03日
    浏览(26)
  • 旋转图片两种方法

    这两种方法在旋转图像时,可能会产生一些不同的效果: rotate_image_new()旋转后的图像完全包含旋转前的内容,并且填充边界尽可能小 rotate_image() 保持原始图像的大小,并根据填充选项决定是否填充边界为白色。如果 if_fill_white 参数为 True,则填充边界为白色;否则,边界将保

    2024年02月11日
    浏览(20)
  • Python OpenCV 图像旋转:实现图像的随意旋转

    Python OpenCV 图像旋转:实现图像的随意旋转 在数字图像处理中,图像旋转是常见的一种图像几何变换操作。利用图像旋转,我们可以将图片进行任意角度的旋转,并且保持图像内容不失真。Python 中的 OpenCV 库提供了丰富的图像处理 API,包括了图像旋转操作。本文将介绍利用

    2024年02月12日
    浏览(29)
  • 使用Python批量旋转,镜像图片

    当我们进行大量图像处理时,经常需要旋转或镜像图像。但一张张处理图片费神又费力,有什么好的办法可以帮助我们快速搞定这个问题呢?这时候我们可以写个简单的python程序来搞定它!~ 在Python中,我们可以使用Pillow库(Python Imaging Library)进行图像处理。Pillow库提供了很

    2024年02月01日
    浏览(31)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包