opencv006图像处理之仿射变换(旋转,缩放,平移)

这篇具有很好参考价值的文章主要介绍了opencv006图像处理之仿射变换(旋转,缩放,平移)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

opencv006图像处理之仿射变换(旋转,缩放,平移),opencv,计算机视觉,opencv,人工智能,图像处理,python,pycharm,学习方法

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

仿射变换的函数:

 平移,旋转 

cv2.warpAffine(scr, M, dsize, flags, mode, value)

 透视

 cv2.warpPerspective(img1, M, desize......)
  • M: 变换矩阵
  • desize: 输出图片大小
  • flags:与resize中的插值算法一致
  • mode:边界外推法标志(有默认值)
  • value:填充边界值(有默认值)

平移

 opencv006图像处理之仿射变换(旋转,缩放,平移),opencv,计算机视觉,opencv,人工智能,图像处理,python,pycharm,学习方法

读入的是二维的图像,所以就不用写最后一行了


向右平移200 (向左就是负数,其他同理)

# 变换矩阵,最少是float32
M = np.float32([[1, 0, 200], [0, 1, 0]])

向下平移200

# 变换矩阵,最少是float32
M = np.float32([[1, 0,  0], [0, 1,  200]])

向右下平移

# 变换矩阵,最少是float32
M = np.float32([[1, 0, 200], [0, 1, 200]])

这个是向右平移的代码:

import cv2
import numpy as np
img1 = cv2.imread("F:\est01\e1.jpg")
h, w, ch = img1.shape
# 变换矩阵,最少是float32
M = np.float32([[1, 0, 200], [0, 1, 0]])
# 平移操作
# 注意opencv中先宽后高
new_img1 = cv2.warpAffine(img1, M, dsize=(w, h))
cv2.imshow('img1', img1)
cv2.imshow('new_img1', new_img1)
cv2.waitKey(0)
cv2.destroyAllWindows()

 

opencv006图像处理之仿射变换(旋转,缩放,平移),opencv,计算机视觉,opencv,人工智能,图像处理,python,pycharm,学习方法 

 旋转

可以用opencv获取变换矩阵

在进行旋转操作时,不方便手动 计算变换矩阵,opencv中提供了获取变换矩阵的api

方法1:

使用cv2.getRotationMatrix2D 

M = cv2.getRotationMatrix2D(center, angle, 缩放比例)
import cv2
import numpy as np
img1 = cv2.imread("F:\est01\e1.jpg")
h, w, ch = img1.shape
# 获取变换矩阵
M = cv2.getRotationMatrix2D((100, 100), 30, 1)
new_img1 = cv2.warpAffine(img1, M, (w, h))
cv2.imshow('img1', img1)
cv2.imshow('new_img1', new_img1)
cv2.waitKey(0)
cv2.destroyAllWindows()

opencv006图像处理之仿射变换(旋转,缩放,平移),opencv,计算机视觉,opencv,人工智能,图像处理,python,pycharm,学习方法

另一种方法:

 使用cv2.getAffineTransform(src, dst)

M = cv2.getAffineTransform(src, dst)

 可以通过三个点来确定变换后的位置,相当于解方程,三个点对应三个方程,解出偏移的参数,旋转的角度

opencv006图像处理之仿射变换(旋转,缩放,平移),opencv,计算机视觉,opencv,人工智能,图像处理,python,pycharm,学习方法

src = np.float32([[200, 100], [300, 100], [200, 300]])
dst = np.float32([[100, 150], [360, 200], [280, 120]])
M = cv2.getAffineTransform(src, dst)
new_img1 = cv2.warpAffine(img1, M, (w, h))

三个点是随便写的,所以有些许奇怪 哈哈哈 

opencv006图像处理之仿射变换(旋转,缩放,平移),opencv,计算机视觉,opencv,人工智能,图像处理,python,pycharm,学习方法 效果像把图片向某个方向拉

透视

 将一种坐标系变成另一种坐标系,可以把倾斜的图片变正

函数:

cv2.warpPerspective(img,M,desize.......)

对于透视变换来说,M是一个3*3的矩阵

cv2.getPerspectiveTransform(src,dst)获取透视变换矩阵,需要4个点,即图片的四个角

src = np.float32([[50, 50], [630, 0], [0, 640], [630, 630]])
dst = np.float32([[0, 0], [640, 0], [0, 640], [640, 640]])
M = cv2.getPerspectiveTransform(src, dst)
new_img1 = cv2.warpPerspective(img1, M, (640, 640))

opencv006图像处理之仿射变换(旋转,缩放,平移),opencv,计算机视觉,opencv,人工智能,图像处理,python,pycharm,学习方法文章来源地址https://www.toymoban.com/news/detail-811752.html

到了这里,关于opencv006图像处理之仿射变换(旋转,缩放,平移)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 数字图像处理 matlab图像的几何运算 实验三 旋转 缩放 裁剪 镜像变换 平移

    原图: 读取原图(这里我的图片名字是atm.png): 我们先说原理,图像旋转的本质是向量的旋转。 矩阵乘法的实质是进行线性变换,因此对一个向量进行旋转操作也可以通过矩阵和向量相乘的方式进行。 因为图像都是通过二维矩阵存放的(单通道),所以对图像进行旋转时

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

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

    2024年02月05日
    浏览(30)
  • 【C++ OpenCV】图像变换:连接、尺寸、翻转、旋转、仿射变换

    目录 图像缩放变换 图像翻转 图像拼接 纵向拼接 横向拼接 图像插值原理 作用 单线性插值 双线性插值的公式 双线性插值的例子 双线性插值的直观展示 意义 仿射变换 图像旋转 实操 一、实现图像旋转 二、根据定义的三个点实现仿射变换,并且求取仿射变换矩阵 源码 src -

    2024年01月18日
    浏览(31)
  • Opencv-C++笔记 (16) : 几何变换 (图像的翻转(镜像),平移,旋转,仿射,透视变换)

    图像旋转是指图像按照某个位置转动一定的角度的过程,旋转中图像仍保持着原始尺寸。图像旋转后图像水平对称轴、垂直对称轴及中心坐标原点都可能会发生变换,因此需要对图像旋转中的坐标进行相应转换。 假设有一个点:P(x,y),它在绕原点 O(0,0) 旋转 β 后,被转换成

    2024年02月14日
    浏览(34)
  • 仿射变换中的旋转缩放变换矩阵推导

    仿射变换可以将矩阵形状转换为平行四边形。可以挤压形状,但是必须保持两边平行。常见的是旋转、缩放、平移变换。缩放和平移比较简单,本文重点推导旋转缩放变换矩阵。 任意一点 ( x 0 , y 0 ) (x_0,y_0) ( x 0 ​ , y 0 ​ ) 可以看成 ( x 0 , 0 ) (x_0, 0) ( x 0 ​ , 0 ) 向量和 ( 0 ,

    2024年04月24日
    浏览(30)
  • Python图像处理丨图像缩放、旋转、翻转与图像平移

    摘要: 本篇文章主要讲解Python调用OpenCV实现图像位移操作、旋转和翻转效果,包括四部分知识:图像缩放、图像旋转、图像翻转、图像平移。 本文分享自华为云社区《[Python图像处理] 六.图像缩放、图像旋转、图像翻转与图像平移》,作者:eastmount 。 本篇文章主要讲解Pyth

    2024年02月06日
    浏览(37)
  • MATLAB图像处理之几何变换——平移与旋转

    可以发现,原图在原坐标基础上向X、Y方向分别平移了50和100个单位。但相应平移的部分也被遮挡了,显然这不符合一些场景的应用需求。 为此,MATLAB还提供了参数设置。在imtranslate函数中设置’OutputView’参数为’full’,即可防止遮挡平移的图像,如下图所示。 MATLAB在进行图

    2024年02月16日
    浏览(30)
  • Matlab|数字图像处理02|图像的傅里叶变换(平移/旋转性质)及图像的离散余弦变换

    问题1:x,y方向同时平移后频谱有何变化? 答:经过平移后的傅里叶变换幅值图与原图像得到的傅里叶变换幅值图基本相同,平移不改变频谱的幅值。 代码运行结果: 代码: 问题2:编程验证一幅图旋转45度后,其傅里叶谱图也旋转了45度。 代码: 问题3:第8行10的数字大小对

    2024年02月08日
    浏览(31)
  • 【OpenCV实现图像:使用OpenCV进行图像处理之透视变换】

    透视变换(Perspective Transformation)是一种图像处理中常用的变换手段,它用于将图像从一个视角映射到另一个视角,常被称为投影映射。透视变换可以用于矫正图像中的透视畸变,使得图像中的物体在新的视平面上呈现更加规则的形状。 透视变换通常涉及到寻找图像中的特定

    2024年02月03日
    浏览(43)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包