OpenCV中图像的平移、旋转、倾斜、透视的讲解与实战(附Python源码)

这篇具有很好参考价值的文章主要介绍了OpenCV中图像的平移、旋转、倾斜、透视的讲解与实战(附Python源码)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

需要源码请点赞关注收藏后评论区留言私信~~~

一、仿射变换

仿射变换是一种仅在二维平面中发生的几何变形,变换之后的图形仍然可以保持直线的平直性和平行性,也就是说原来的直线变换之后还是直线,平行线变换之后还是平行线,常见的仿射变换包括平移 旋转和倾斜

opencv 旋转,OpenCV,opencv,计算机视觉,人工智能,python,图像处理

OpenCV通过cv2.warpAffine()方法实现仿射变换效果 语法如下

dst=cv2.warpAffine(src,M,dsize,flags,borderMode,borderValue)

M 一个二行三列的矩阵 根据此矩阵的值变换原图中的像素位置

dsize 输出图像的尺寸大小

flags 插值方式 建议使用默认方式

borderMode 边界类型

borderValue 边界值

M也被叫做仿射矩阵 实际上是一个2*3的列表

M=[[a,b,c],[d,e,f]] 仿射变换输出的图像按照以下公式计算

新x=原x*a+原y*b+c

新y=原x*d+原y*e+f

平移

 平移就是让图像中的所有像素同时沿着水平或者垂直方向移动,实现这种效果只需要将M设置为以下即可

M=[[1,0,水平移动距离],[0,1,垂直移动的距离]]

 让图像向右下方平移效果如下

opencv 旋转,OpenCV,opencv,计算机视觉,人工智能,python,图像处理

import cv2
import numpy as np
img = cv2.imread("demo.png")  # 读取图像
rows = len(img)  # 图像像素行数
cols = len(img[0])  # 图像像素列数
M = np.float32([[1, 0, 50],  # 横坐标向右移动50像素
                [0, 1, 100]])  # 纵坐标向下移动100像素
dst = cv2.warpAffine(img, M, (cols, rows))
cv2.imshow("img", img)  # 显示原图
cv2.imshow("dst", dst)  # 显示仿射变换效果
cv2.waitKey()  # 按下任何键盘按键后
cv2.destroyAllWindows()  # 释放所有窗体

 旋转

OpenCV提供了getRotationMatrix2D方法自动计算旋转图像的M矩阵 语法如下

M=cv2.getRotationMartix2D(center,angle,scale)

center 旋转点的中心坐标

angle 旋转的角度 正数逆时针 负数顺时针

scale 缩放比例

 下面让图像逆时针旋转30度的同时缩小到原来的百分之八十

opencv 旋转,OpenCV,opencv,计算机视觉,人工智能,python,图像处理

import cv2
img = cv2.imread("demo.png")  # 读取图像
rows = len(img)  # 图像像素行数
cols = len(img[0])  # 图像像素列数
center = (rows / 2, cols / 2)  # 图像的中心点
M = cv2.getRotationMatrix2D(center, 30, 0.8)  # 以图像为中心,逆时针旋转30度,缩放0.8倍
dst = cv2.warpAffine(img, M, (cols, rows))  # 按照M进行仿射
cv2.imshow("img", img)  # 显示原图
cv2.imshow("dst", dst)  # 显示仿射变换效果
cv2.waitKey()  # 按下任何键盘按键后
cv2.destroyAllWindows()  # 释放所有窗体

 倾斜

OpenCV需要定位图像的三个点来计算倾斜效果,这三个点分别是左上角 右上角和左下角,这样可以保证图像的平直性和平行性

同样有getAffineTransform方法来自动计算倾斜图像的M矩阵 语法如下

M=cv2.getAffineTransform(src,dst)

src 原图三个点的坐标 格式为三行两列的浮点数列表

dst 倾斜图像的三个点坐标 格式与src一样

下面让图像向右倾斜

opencv 旋转,OpenCV,opencv,计算机视觉,人工智能,python,图像处理

import cv2
import numpy as np
img = cv2.imread("demo.png")  # 读取图像
rows = len(img)  # 图像像素行数
cols = len(img[0])  # 图像像素列数
p1 = np.zeros((3, 2), np.float32)  # 32位浮点型空列表,原图三个点
p1[0] = [0, 0]  # 左上角点坐标
p1[1] = [cols - 1, 0]  # 右上角点坐标
p1[2] = [0, rows - 1]  # 左下角点坐标
p2 = np.zeros((3, 2), np.float32)  # 32位浮点型空列表,倾斜图三个点
p2[0] = [50, 0]  # 左上角点坐标,向右挪50像素
p2[1] = [cols - 1, 0]  # 右上角点坐标,位置不变
p2[2] = [0, rows - 1]  # 左下角点坐标,位置不变
M = cv2.getAffineTransform(p1, p2)  # 根据三个点的变化轨迹计算出M矩阵
dst = cv2.warpAffine(img, M, (cols, rows))  # 按照M进行仿射
cv2.imshow('img', img)  # 显示原图
cv2.imshow('dst', dst)  # 显示仿射变换效果
cv2.waitKey()  # 按下任何键盘按键后
cv2.destroyAllWindows()  # 释放所有窗体

 二、透视

透视就是让图像在三维空间中变形,从不同的角度观察物体,会看到不同的变形画面

OpenCV中需要通过定位图像的四个点计算透视效果,透视效果不能保证图像的平直性和平行性

OpenCV通过warpPerspective方法来实现透视效果

M=cv2.warpPerspective(src,M,dsize,flags,borderMode,borderValue)

M是一个三行三列的矩阵 根据此矩阵的值变换原图中的像素位置

通过getPerspectiveTransform方法来计算M矩阵

下面模拟从底部观察图像得到的透视效果

 opencv 旋转,OpenCV,opencv,计算机视觉,人工智能,python,图像处理

import cv2
import numpy as np
img = cv2.imread("demo.png")  # 读取图像
rows = len(img)  # 图像像素行数
cols = len(img[0])  # 图像像素列数
p1 = np.zeros((4, 2), np.float32)  # 32位浮点型空列表,保存原图四个点
p1[0] = [0, 0]  # 左上角点坐标
p1[1] = [cols - 1, 0]  # 右上角点坐标
p1[2] = [0, rows - 1]  # 左下角点坐标
p1[3] = [cols - 1, rows - 1]  # 右下角点坐标
p2 = np.zeros((4, 2), np.float32)  # 32位浮点型空列表,保存透视图四个点
p2[0] = [90, 0]  # 左上角点坐标,向右移动90像素
p2[1] = [cols - 90, 0]  # 右上角点坐标,向左移动90像素
p2[2] = [0, rows - 1]  # 左下角点坐标,位置不变
p2[3] = [cols - 1, rows - 1]  # 右下角点坐标,位置不变
M = cv2.getPerspectiveTransform(p1, p2)  # 根据四个点的变化轨迹计算出M矩阵
dst = cv2.warpPerspective(img, M, (cols, rows))  # 按照M进行仿射
cv2.imshow('img', img)  # 显示原图
cv2.imshow('dst', dst)  # 显示仿射变换效果
cv2.waitKey()  # 按下任何键盘按键后
cv2.destroyAllWindows()  # 释放所有窗体

 创作不易 觉得有帮助请点赞关注收藏~~~文章来源地址https://www.toymoban.com/news/detail-779404.html

到了这里,关于OpenCV中图像的平移、旋转、倾斜、透视的讲解与实战(附Python源码)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 【OpenCV】图像变换(缩放、平移、旋转、仿射)

    图像变换是指通过对图像进行缩放、平移、旋转、仿射、透视等变换来改变图像的形状和大小。在本篇博客中,我们将详细介绍OpenCV中的图像变换函数,并提供示例代码以帮助读者更好地理解这些函数的使用方法。 缩放变换是指通过改变图像的大小来改变图像的形状。在Op

    2024年02月07日
    浏览(61)
  • Opencv 基础(四):使用OpenCV进行图像旋转和平移

    如今,图像编辑变得越来越流行,因为手机有内置的功能,可以让你 裁剪、旋转 和更多的操作你的图像。 这篇文章中,我们将探索和学习这些图像编辑技术。具体来说,我们将学习如何: 旋转图像 移动图像 图像旋转和平移是图像编辑中最基本的操作之一。两者都属于广义的

    2024年02月05日
    浏览(49)
  • opencv006图像处理之仿射变换(旋转,缩放,平移)

    空间变换中的仿射变换对应着五种变换,平移,缩放,旋转,翻转,错切。而这五种变化由原图像转变到变换图像的过程,可以用仿射变换矩阵进行描述。而这个变换过程可以用一个2*3的矩阵与原图进行相乘得到。关键就是这个矩阵M:  平移,旋转   透视 M: 变换矩阵 desi

    2024年01月21日
    浏览(52)
  • 【C++】【Opencv】cv::warpAffine()仿射变换函数详解,实现平移、缩放和旋转等功能

    仿射变换是一种二维变换,它可以将一个二维图形映射到另一个二维图形上,保持了图形的“形状”和“大小”不变,但可能会改变图形的方向和位置。仿射变换可以用一个线性变换矩阵来表示,该矩阵包含了六个参数,可以进行平移、缩放、旋转等操作。通过原理、函数和

    2024年02月05日
    浏览(63)
  • 三维变换矩阵实战——三维点云的旋转、缩放、镜像、错切、平移、正交投影

    旋转矩阵:右边矩阵是点云的原始坐标,左边的是旋转矩阵     可视化:绕x轴旋转90度 代码: 旋转矩阵:    可视化:绕y轴旋转180度 代码: 旋转矩阵:    可视化:绕z轴旋转90度 代码: 旋转矩阵:  线绕哪个轴转,xyz矩阵就和哪和轴的旋转矩阵先计算      可视化:先

    2024年02月04日
    浏览(93)
  • C++实战Opencv第二天——色彩空间转换函数和opencv中图像对象创建与赋值(从零开始,保姆教学)

    OpenCV是一个强大的计算机视觉库,使用C++作为主要编程语言,对于图像处理和计算机视觉领域具有重要意义。其提供了丰富的功能和算法,使得开发者能够快速实现各种图像处理和计算机视觉应用。OpenCV C++为图像处理和计算机视觉领域的开发者提供了一个高效、稳定的工具。

    2024年02月20日
    浏览(43)
  • Python 基于 OpenCV 视觉图像处理实战 之 OpenCV 简单实战案例 之六 简单图像倾斜校正处理效果

    目录 Python 基于 OpenCV 视觉图像处理实战 之 OpenCV 简单实战案例 之六 简单图像倾斜校正处理效果 一、简单介绍 二、简单图像倾斜校正处理效果实现原理 三、简单图像倾斜校正处理效果案例实现简单步骤 四、注意事项 Python是一种跨平台的计算机程序设计语言。是一种面向对

    2024年04月13日
    浏览(69)
  • Halcon中图像旋转的两种方式

    Halcon图像旋转有两种类型,一种类型是直接使用 这样的图像只能围绕中心进行旋转,而且设置的时候只能设置旋转角度,其中函数组成如下: 效果如下:   这种变换方法简单方便,但是可控制参数太少,如果要实现更多功能,我们可以通过仿射变换算子来进行图像旋转缩放

    2024年02月11日
    浏览(36)
  • GLSL——旋转、平移和缩放

    hello 兄弟们,好久不见撒,我又回来啦!,今天主要讲解如何在顶点着色器中进行旋转、平移和缩放,涉及到矩阵和向量方面的知识哦,忘记的可以翻一下高中数学啦,在讲之前,先回顾一下矩阵和向量点积的知识,矩阵点乘向量,等于矩阵的每一行分别和向量相乘的和,如

    2024年02月16日
    浏览(44)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包