OpenCV(图像处理)-基于Python-图像的基本变换-平移-翻转-仿射变换-透视变换

在这里插入图片描述

  • 1. 概述
  • 2. 接口介绍
    • resize()
    • flip()
    • rotate()
    • 仿射变换
      • warpAffine()
      • getRotationMatrix2D()-变换矩阵1
      • getAffineTransform()-变换矩阵2
    • 透视变换
      • warpPerspective()
      • getPerspectiveTransform()

1. 概述

为了方便开发人员的操作,OpenCV还提供了一些图像变换的API,本篇文章讲简单介绍各种API的使用,并附上一些样例。

2. 接口介绍

resize()

图像缩放函数,用于把图像按指定的尺寸放大或缩小。
dst = cv2.resize(src, dsize, fx, fy, interpolation)
dst = 生成的目的图像
src:需要变换的原图像
disize:(x, y)需要变换图像的尺寸,直接填
fx,fy:缩放因子,与disize会冲突,通常只需要二选一即可
interpolation:插值算法,用于缩放的算法。默认为双线性插值。

缩放算法参数
在这里插入图片描述
效果越好的算法运算越复杂,效果越好。反之相反。

import cv2
import numpy as nplina = cv2.imread('./image/lina.jpg')
print(lina.shape)
# 修改图像大小:fx,fy可以省略,默认为双线性插值
lina2 = cv2.resize(lina, (700, 700))
# 使用缩放因子,需要指定参数,并且dsize传空
lina3 = cv2.resize(lina, None, fx=2, fy=2, interpolation=cv2.INTER_AREA)cv2.imshow('lina', lina)
cv2.imshow('lina3', lina3)cv2.waitKey(0)

在这里插入图片描述

flip()

图像翻转函数,讲图像上下翻转,左右翻转
img1 = cv2.flip(img,flipCode)
img:需要翻转的图片
flipCode:值为0,上下翻转;值>0,左右翻转;值<0,上下左右一起翻转。

import cv2
import numpy as nplina = cv2.imread('./image/lina.jpg')
print(lina.shape)
# 上下翻转
lina_0 = cv2.flip(lina, 0)
# 左右翻转
lina_1 = cv2.flip(lina, 1)
# 上下左右翻转
lina_01 = cv2.flip(lina, -1)cv2.imshow('lina', lina)
cv2.imshow('lina_0', lina_0)
cv2.imshow('lina_1', lina_1)
cv2.imshow('lina_01', lina_01)cv2.waitKey(0)

在这里插入图片描述

rotate()

将图片按顺时针逆时针旋转一定角度
img2 = cv2.rotate(img, rotateCode)
img:需要旋转的图片
rotateCode:含义分别为:顺时针转90,180度,逆时针转90度。

rotateCode
在这里插入图片描述

import cv2
import numpy as nplina = cv2.imread('./image/lina.jpg')
print(lina.shape)# 顺时针转90
lina_90 = cv2.rotate(lina, cv2.ROTATE_90_CLOCKWISE)# 顺时针转180
lina_180 = cv2.rotate(lina, cv2.ROTATE_180)# 顺时针转270,逆时针转90
lina_270 = cv2.rotate(lina, cv2.ROTATE_90_COUNTERCLOCKWISE)
cv2.imshow('lina', lina)
cv2.imshow('lina_90', lina_90)
cv2.imshow('lina_180', lina_180)
cv2.imshow('lina_270', lina_270)cv2.waitKey(0)

在这里插入图片描述

仿射变换

仿射变换是图像旋转、缩放、平移的总成。

warpAffine()

img2 = cv2.warp(src, M, dsize, flags, mode, value)
src:需要变换的图像
M:进行变换的矩阵,变换成什么样子由M决定,可以由特定接口来求。
dsize:输出图像的尺寸
flags:与resize函数的缩放算法一致,默认为双线性插值。
mode:边界处标志
value:填充边界的值
后三个参数一般都用默认,主要使用前3个参数

getRotationMatrix2D()-变换矩阵1

求变换矩阵M的函数,主要用于旋转
M = cv2.getRotationMatrix2D(center, angle, scale)
center:中心点,按住哪个点进行旋转
angle:旋转的角度(逆时针旋转)
scale:缩放比例,1.0不缩放

import cv2
import numpy as nplina = cv2.imread('./image/lina.jpg')
print(lina.shape)# 变换前要求出变换矩阵M = cv2.getRotationMatrix2D((200, 200), 30, 1.0)
lina2 = cv2.warpAffine(lina, M, (474, 474))cv2.imshow('lina', lina)
cv2.imshow('lina2', lina2)cv2.waitKey(0)

在这里插入图片描述

getAffineTransform()-变换矩阵2

求变换矩阵M,主要是用于平移+旋转,利用三个坐标点前后变化来确定一个平面的变化
M = cv2.getAffineTransform(src[], dst[])
src:源坐标点,以列表的形式传入(数据格式一定为float32
dst:变换后图的坐标,以列表的形式传入(数据格式一定为float32

import cv2
import numpy as nplina = cv2.imread('./image/lina.jpg')
print(lina.shape)# 变换前要求出变换矩阵
# 坐标一定要是32位的小数!!否则会报错
src = np.float32([[0, 0], [0, 100], [100, 0]])
dst = np.float32([[50, 50], [50, 150], [200,50]])
M = cv2.getAffineTransform(src, dst)
lina2 = cv2.warpAffine(lina, M, (474, 474))cv2.imshow('lina', lina)
cv2.imshow('lina2', lina2)cv2.waitKey(0)

透视变换

完全改变物体的位置和形状,需要四个坐标点。一般用来调整图片的位置。

warpPerspective()

用于透视变换的主函数
img2 = cv2.warpPerspective(img, M, dsize, …)
img:需要进行变换的图像
M:进行透视变换的矩阵
dsize:输出图片的大小

getPerspectiveTransform()

用来求透视变换的矩阵,需要四个点
M = cv2.getPerspectiveTransform(src[], dst[])
src:源坐标点,以列表的形式传入(数据格式一定为float32
dst:变换后图的坐标,以列表的形式传入(数据格式一定为float32

import cv2
import numpy as npwork = cv2.imread('./image/work.jpg')
# 将图片调整到适合大小
work = cv2.resize(work, (700, 700), interpolation=cv2.INTER_AREA)
# 设置适当变换坐标,求出变换矩阵
src = np.float32([[210, 20], [700, 110], [0, 660], [600, 700]])
dst = np.float32([[0, 0], [700, 0], [0, 700], [700, 700]])
M = cv2.getPerspectiveTransform(src, dst)
# 进行透视变换
work2 = cv2.warpPerspective(work, M, (700, 700))
cv2.imshow('work', work)
cv2.imshow('work2', work2)cv2.waitKey(0)

变换后如图所示,将主要图片变正了
在这里插入图片描述

以上就是图像变换的简单介绍,如果有疑问,欢迎在评论区讨论哦。

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

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

相关文章

计算机改名字后找不到网络,改了wifi名字后电脑搜不到网络怎么办? | 192路由网...

问&#xff1a;为什么我改了wifi名字后&#xff0c;我的电脑就搜不到wifi信号了&#xff1f; 答&#xff1a;修改wifi名称后如果搜索不到wifi信号了&#xff0c;可以按照下面的步骤进行操作&#xff0c;以解决此问题。 1. 如果将wifi名字改成了中文&#xff0c;建议你将其修改为…

柠檬班python自动化百度云_柠字取名2019-尚名网

柠字取名2019-尚名网 名字不是一个简单、随便的称号&#xff0c;它隐含着不容忽视的信息力量。寓意好的名字有积极的暗示作用&#xff0c;使人更有信心和勇气去实现理想&#xff0c;寓意欠佳的名字反之。可见&#xff0c;名字对人们而言是非常重要的&#xff0c;为人父母者一定…

为了取一个花名,我爬下了中草药网所有的名字!

很酷哦&#xff01;不过&#xff0c;对我这个选择恐惧症来说&#xff0c;也很纠结…我们先看一下有哪些要求吧&#xff1f; 中草药名&#xff1f;人参&#xff1f;西洋参&#xff1f;还有啥&#xff1f;&#xff1f;&#xff1f; 作为一个不怎么吃药的非医学生&#xff0c;这题…

使用MySQL查找姓名重名_查询名字有多少人重名,全国同名同姓查询全国姓名数据库...

查询名字有多少人重名&#xff0c;全国同名同姓查询全国姓名数据库 时间&#xff1a;2020-04-04 15:30:01 很多爸爸妈妈在帮孩子取姓名的时候&#xff0c;会想了解在全国范围内重名的人数&#xff0c;希望宝宝的名字不会跟太多人一样。或者有的小伙伴单纯想弄明白全中国同自己姓…

百度排名优化工具 V3.0 正式版

介绍 百度排名优化工具正式版是款可以迅速提升网址百度搜索排名的工具。软件拥有智能计算关键词点击数&#xff0c;点击规则自动添加等。软件还提供了维护模式&#xff0c;自动维护您的关键词排名&#xff0c;让您的关键词排名更加稳定可靠。百度排名优化工具可以将你的网站在…

给Android系统瘦身,安卓优化大师:给系统瘦身

安卓优化大师是一款基于Android平台的系统优化软件&#xff0c;最新版本界面设计简单&#xff0c;功能全面&#xff0c;可以帮助Android手机用户给系统瘦身&#xff0c;优化手机性能。 程序名称&#xff1a;安卓优化大师 平台&#xff1a;Android 类型&#xff1a;系统优化 软件…

Windows优化大师7.96版下载

Windows优化大师提供了全面且有效而简便安全的系统检测、系统优化、系统清理、系统维护四大功能模块以及数个附加的工具软件。它能够有效地帮助用户了解自己的计算机软硬件信息&#xff1b;简化操作系统设置步骤&#xff1b;提升计算机运行效率&#xff1b;清理系统运行时产生的…

SEO优化工具-免费SEO优化工具下载-SEO优化工具大全中心

什么是SEO优化工具&#xff1f;SEO优化工具&#xff08;Seo tools&#xff09;能在搜索引擎优化过程中起到辅助的作用&#xff0c;如数据查询工具、网站排名工具、网站流量分析功能&#xff0c;站群管理工具等&#xff0c;用来提高每个SEO人员工作中的效率。 seo优化工具&#…

Android性能优化之APK优化,完整版开放下载

前言 移动研发火热不停&#xff0c;越来越多人开始学习 android 开发。但很多人感觉入门容易成长很难&#xff0c;对未来比较迷茫&#xff0c;不知道自己技能该怎么提升&#xff0c;到达下一阶段需要补充哪些内容。市面上也多是谈论知识图谱&#xff0c;缺少体系和成长节奏感&a…

win10优化大师v1.0去插件免费版

名称&#xff1a;win10优化大师v1.0去插件免费版 版本&#xff1a;1.0 软件大小&#xff1a;5.70MB 软件语言&#xff1a;中文简体 软件授权&#xff1a;免费版 应用平台&#xff1a;Win10 win10优化大师是一款面向Win10操作系统提供的优化软件&#xff0c;提供常用系统功能的…

Android性能优化工具

一、性能优化工具基础 1.1 概述 在Android开发中&#xff0c;开发者可通过"系统跟踪"观察Android设备的运行情况并生成跟踪报告&#xff0c;在此基础上进行分析优化。Android 平台提供了多种获取跟踪信息的工具&#xff1a; Android Studio CPU 性能剖析器Systrace…

PS 的常见抠图工具

PS 的常见抠图工具 1. 套索工具2. 多边形套索工具3. 磁性套索工具4. 对象套索工具5. 快速套索工具6. 魔棒工具7. 其他 1. 套索工具 能完成快速抠图, 缺点是不好控制. 2. 多边形套索工具 绘制多边形区域抠图, 缺点是不够圆滑, 返回上步是 Backspace 键. 3. 磁性套索工具 吸附边缘…

PS抠图的6种方法

1. 魔棒工具 用于去除单色背景色图片。 选中魔棒工具后&#xff0c;可以点击选中图片中的背景色进行选取&#xff0c;选中后可以去除背景。魔棒工具一般用来去除背景色为单调色的背景&#xff0c;比如背景是白色或者其他纯色之类的。 在选择时可以选择容差\连续&#xff1a; 连…

【QQ聊天界面、创建模型、懒加载数据 Objective-C语言】

一、今天我们要做的就是这个案例 1.我们今天要做的案例,做好了之后的效果就是这样 这个案例,和昨天那个微博的案例是非常相像的, 哪些相像呢, 1)整体是不是也是能滚动啊, 2)能滚动,它不仅仅是一个UIScrollView 它里面,这个也是一行、两行、三行、四行、 所以说,…

Hive学习---7、企业级调优

1、企业级调优 1.1 计算资源配置 到此学习的计算环境为HIve on MR。计算资源的调整主要包括Yarn和MR。 1.1.1 Yarn资源配置 1、Yarn配置说明 需要调整的Yarn的参数均与CPU、内存等资源有关&#xff0c;核心配置参数如下&#xff1a; &#xff08;1&#xff09;yarn.nodeman…

代码随想录算法训练营第四十八天|198.打家劫舍|213.打家劫舍II|337.打家劫舍III

LeetCode198.打家劫舍 动态规划五部曲&#xff1a; 1&#xff0c;确定dp数组&#xff08;dp table&#xff09;以及下标的含义&#xff1a;dp[i]&#xff1a;考虑下标i&#xff08;包括i&#xff09;以内的房屋&#xff0c;最多可以偷窃的金额为dp[i]。 2&#xff0c;确定递…

MockServer 服务框架设计

【摘要】 大部分现有的 mock 工具只能满足 HTTP 协议下简单业务场景的使用。但是面对一些复杂的业务场景就显得捉襟见肘&#xff0c;比如对 socket 协议的应用进行 mock&#xff0c;或者对于支付接口的失败重试的定制化 mock 场景。为解决上述问题&#xff0c;霍格沃兹测试学院…

压力测试遭遇大量TIME_WITE之后(这样解决)

前言&#xff1a;http协议是互联网中最常使用的应用层协议&#xff0c;它的绝大多数实现是基于TCP协议的。 目录 一 问题描述 二 问题跟踪 三 跟进分析 四 解决方法 一、问题描述 某天&#xff0c;在对一个提供http接口的后台服务进行压力测试过程中&#xff0c;我们设定了…

IPAD、IOS、MAC邮件配置QQ邮箱

1、登录QQ邮箱 2、点击设置 3、切换到账号&#xff0c;往下拉开启IMAP/SMTP服务&#xff0c;如果已经开启直接点击生成授权码即可 4、按照指示发送短信&#xff0c;验证成功后会有一段码&#xff0c;此为密码&#xff0c;按照下图配置即可

mac强制退出应用

第一种方法&#xff1a;通过键盘强制退出当前能够响应的 Mac 应用。 按住 Command Option Shift Esc 键一两秒&#xff0c;直到应用被强制退出。这是退出有前台界面的应用的最快方法了。 第二种方法&#xff1a;调出“强制退出应用”窗口。 按下 Command Option Esc 键&…