Python opencv 实现图像平移及旋转

news2025/1/18 20:11:14

Python opencv 实现图像平移及旋转

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

cv2.warpAffine()函数介绍

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

dst = cv2.warpAffine(img, M, dsize)

参数

  • img ---- 代表图像 。
  • M ---- 代表一个2行3列的矩阵,根据此矩阵的值变换原图中像素的位置 。
  • dsize ----代表输出图像的尺寸大小 。
  • dst ---- 代表经过仿射变换后输出的图像。

平移

平移就是让图像中所有像素同时沿着水平或垂直方向移动。在平移的操作中,我们需要把M设置为以下格式实现平移操作。

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

若水平移动的距离为正数,图像会向右移动,若为复数,图像会向左移动;若垂直移动的距离为正数,图像会向下移动,若为负数,图像会向上移动。

import cv2
import numpy as np

# 读取图像
img = cv2.imread("curve.jpg")
# 获取图像的长宽和通道数
height, width, channel = img.shape
# 设置平移仿射矩阵,示例是向下平移50个像素
M1 = np.float32([[1, 0, 0], [0, 1, 50]])
# 进行仿射变换
new_img = cv2.warpAffine(img, M1, (width, height))
cv2.imwrite("down_curve.jpg", new_img)

curve.jpg

在这里插入图片描述

down_curve.jpg

请添加图片描述

旋转

图像旋转也是通过 M 矩阵来实现,但是得出这个矩阵需要复杂的运算,而OpenCV提供了getRotationMatrix2D()方法来自动计算出旋转图像的 M 矩阵,其语法如下:

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

参数

  • center ---- 代表旋转的中心点坐标。
  • angle ---- 代表旋转的角度,正数表示逆时针旋转,负数表示顺时针旋转。
  • scale ----代表缩放比例,浮点类型。
  • M ---- 代表计算出的仿射矩阵。
import cv2
import numpy as np

# 读取图像
img = cv2.imread("curve.jpg")
# 获取图像的长宽和通道数
height, width, channel = img.shape
cx = int(width/2)
cy = int(height/2)
center = (cx, cy)
# 设置旋转仿射矩阵,示例是顺时针旋转3度
M2 =  cv2.getRotationMatrix2D(center=center, angle=-3, scale=1.0)
# 进行仿射变换
new_img = cv2.warpAffine(img, M2, (width, height))
cv2.imwrite("rot_curve.jpg", )

curve.jpg

请添加图片描述

rot_curve.jpg

请添加图片描述

日常学习记录,一起交流讨论吧!侵权联系~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/428001.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

IMX6ULL-IRQ中断之添加中断向量表

一. 中断向量表 中断向量表是存放中断向量的表。中断服务程序的入口地址或存放中断服务程序的首地址成为中断向量,因此中断向量表是一系列中断服务程序入口地址组成的表。当有中断事件发生时,处理器通过中断向量表进入相关的中断服务程序处理事件。 二.…

自动化测试(二):QTP验证点

1 、程序自带验证点 自带验证点:图形界面insert -> checkpoint Standard Checkpoint 标准验证:用于检查测试对象的属性 Text Checkpoint 文本验证:用于检查文本字符串是否在应用程序中的适当位置出现 Text Area Checkpoint文本区域验…

饮用水中的六价铬去除工艺详解

铬是人体必需的微量元素,天然水不含铬,海水中铬的平均浓度为0.05μg/L,饮用水中铬含量更低。 铬在水中主要以三价和六价形式存在,三价的铬是对人体有益的元素,而六价铬是有毒的。由于其毒性之高,已被国家列…

Smith预估器

Smith预估器主要针对存在大滞后的系统,作用延迟和反馈延迟环节的控制,Smith预估器的另一篇文章,请参看下面的博客文章: 博途1200/1500PLC Smith预估器(补偿器)算法实现(FB)_RXXW_Dor的博客-CSDN博客在写这篇文章之前写过一篇"大林控制算法",大家可以参看下面这…

免费的包噪音网站分享

免费的包噪音网站分享 现代生活中,噪音扰人,影响健康和情绪。白噪音可以为人们提供放松心情、提高睡眠质量和专注力的帮助。 现在有很多免费的白噪音网站可以任意使用和分享,包括海浪声、雨声、蝉鸣声等等,非常适合在办公室、家里…

windows 下安装 ffmpeg

介绍一下我的环境及开发软件版本 windows phpstudy php7.3 进入安装步骤 1.下载windows系统的FFMpeg 下载链接: http://ffmpeg.org/download.html ps: 这里有各种版本了 (未使用这个版本)git地址:https://github.com/BtbN/…

数据结构初阶 - 汇总

-0- 数据结构前言 什么是数据结构 什么是算法 数据结构和算法的重要性-1- 时间复杂度和空间复杂度 👉数据结构 -1- 时间复杂度和空间复杂度 | C 算法效率 时间复杂度大O的渐进表示法eg 空间复杂度 常见复杂度对比OJ 消失的数组 轮转数组-2- 顺序表 与 链表 &am…

反射之构造方法和成员变量

什么是反射 反射允许对成员变量,成员方法和构造方法的信息进行编程访问。 Class类中获取构造方法的方法 Constructor getConstructors() Constructor getDeclaredConstructors() Constructor…

[STM32F103C8T6]看门狗

看门狗: 在由单片机构成的微型计算机系统中,由于单片机的工作常常会受到来自外界电磁场的干扰,造 成程序的跑飞,而陷入死循环,程序的正常运行被打断,由单片机控制的系统无法继续工作,会 造成整个…

LeetCode 1206. 设计跳表

LeetCode 1206. 设计跳表 难度:hard\color{red}{hard}hard 题目描述 不使用任何库函数,设计一个 跳表 。 跳表 是在 O(log(n))O(log(n))O(log(n)) 时间内完成增加、删除、搜索操作的数据结构。跳表相比于树堆与红黑树,其功能与性能相当&am…

【区块链】【FISCO】WeIdentity

什么是 WeIdentity? 官方的说法:去中心化身份标识解决方案。其实说白了就是互联网上每个人都拥有自己数字身份,并且这个身份是唯一且不可篡改的。 WeIdentity要解决的问题就是用来解决数字身份验证的问题。传统互联网身份验证的方式通常用账…

将ip地址中的每一个字符串按照分隔符提取

1、算法思想 该题采用 c 中的 string 完成比较方便 对于字符串 string str1“hehehe:hahaha:xixixi:lalala” 定义 int pos 0,记录子串的初始位置 在循环语句中重复执行以下操作: (1)、定义 int ret str1.find(":",…

OpenAI-ChatGPT最新官方接口《聊天交互多轮对话》全网最详细中英文实用指南和教程,助你零基础快速轻松掌握全新技术(二)(附源码)

目录Chat completions Beta 聊天交互前言Introduction 导言Response format 提示格式Managing tokensCounting tokens for chat API calls 为聊天API调用标记计数Instructing chat models 指导聊天模型Chat vs Completions 聊天与完成FAQ 问与答其它资料下载Chat completions B…

27.Linux网络编程socket变成 tcp 高并发 线程池 udp

好,咱们开始上课了,从今天开始咱们连续讲 8 天的,网络编程这个还是在linux环境下去讲,咱们先看一下咱们这 8 天都讲什么东西,跟大家一块来梳理一下,你先有个大概的印象,这些你也不要记&#xff…

什么是以太坊

以太网是“世界的计算机”,这是以太坊平台的一种常见描述。这是什么意思呢?让我们首先从关注计算机科学的描述开始,然后对以太坊的功能和特性进行更实际的解读,并将其与比特币和其他分布式账本技术(简单起见&#xff0…

【学习笔记】unity脚本学习(三)(向量 Vector3)

目录向量复习高中向量基础【数学】向量的四则运算、点积、叉积、正交基叉乘公式叉乘运算定理向量、坐标系点积叉积Vector3 三维向量静态变量变量变量normalized 与 Normalize() 方法静态方法ClampMagnitudeCrossDistanceDotMoveTowards其他变换类似Lerp 在两个点之间进行线性插…

走出至暗时刻,手机“冲高”仍有新故事

随着数十年的发展变迁,智能手机行业已进入平稳发展期,在格局重塑的同时,也引来外界的质疑:出货量下滑,是否意味着行业开始进入至暗时刻? 事实上,这种质疑只看到表层的数据变化,没有…

[Java]Cookie机制

1.Session机制: Session机制https://blog.csdn.net/m0_71229255/article/details/130138826?spm1001.2014.3001.5501 2. 什么是cookie HTTP协议本身是无状态的。什么是无状态呢,即服务器无法判断用户身份。Cookie实际上是一小段的文本信息&#xff0…

优维可观测轴心产品大观:HyperInsight超融合持续可观测解决方案

随着Kubernetes得到越来越广泛的采用,企业软件系统正在向复杂的云原生架构进行革命性转变。应用形式呈现有Web、APP、小程序等多种形式,访问的网络有4G、5G、Wi-Fi等。企业用云也从单一云时代,逐渐来到混合多云时代。在这些庞大复杂的多云环境…

【接口测试】从0不到1的心路历程

我是一名做了三年测试的tester,2020年以功能测试工程师的身份入职北京一家医疗培训公司,入职后为了提高测试效率,接触到接口测试,以下是从零到现在 (还有很大完善的空间,所以不能算是1) 的一些心路历程。 做接口测试的…