Python OpenCV超详细讲解透视变换的实现
作者:振华OPPO 发布时间:2021-08-02 21:19:48
准备工作
右击新建的项目,选择Python File,新建一个Python文件,然后在开头import cv2
导入cv2库,import numpy
并且重命名为np
。
import cv2
import numpy as np
我们还要知道在OpenCV中,坐标轴的方向是x轴向右,y轴向下,坐标原点在左上角,比如下面这张长为640像素,宽为480像素的图片。OK,下面开始本节的学习吧。
场景描述
给定任意一张图像,从中分割出你需要的区域,并且以指定的大小显示出来。而且分割出的图像在线性空间中还是与显示的窗口是平行的。就比如:我想要获取下面的K,原图中K是斜躺着的,分割后显示出来应该是竖直站立的。那么该如何实现这样的效果呢?
在实现上述效果前,我们需要获取些重要信息,比如说上图中扑克牌K的四个坐标点。我们可以使用画图工具打开这张图片,然后将鼠标放置在分割区域的四个点上,即可获取到坐标信息。
因为画图中图像的宽高坐标轴和OpenCV是一样的,
当我将鼠标放到K左上角时,画图的左下角就显示出来(734像素,185像素),
这就是左上角这个点的坐标。
透视变换
上面的要求实现看起来比较困难,但是用cv2库,实现起来其实只有9行代码。
首先我们设置下输出图片的宽width为250,高height为350。
然后读取我们的图片,就是上面这张图。
定义目标区域的四个点坐标,分别为:左上、右上、左下、右下。我们在上一步已经获取到了。
pst2是输出图片在图片框中的位置,选择平铺即可,固定写法。
使用库函数
warpPerspective
实现透视变换,感兴趣的可以深入了解下原理。最后输出并且显示两张图像。
width,height=250,350
img=cv2.imread("Resources/poker.jpg")
pst1=np.float32([[734,185],[1101,266],[621,679],[1030,789]])
pst2=np.float32([[0,0],[width,0],[0,height],[width,height]])
matrix=cv2.getPerspectiveTransform(pst1,pst2)
imgOutput=cv2.warpPerspective(img,matrix,(width,height))
cv2.imshow("Image",img)
cv2.imshow("Output",imgOutput)
cv2.waitKey(0)
我们来看下效果,左图是我们透视变换的图像,右图是原图像:
第五节的内容,其实很有趣,在生活中有很多应用。眼过千遍不如手过一遍,快去动手敲一遍吧~
来源:https://blog.csdn.net/qq_42257666/article/details/122920896


猜你喜欢
- 前言圣诞节快到了,是不是想用python画一个可爱的圣诞树,我在各大网站都查了一下,都不太美观,然后我就学习了一下别人的代码改写了一下,自己
- 本文实例为大家分享了python实现快递价格查询系统的具体代码,供大家参考,具体内容如下一、代码#--author--张俊杰@Nick#系统
- 正在看的ORACLE教程是:怎么才能限制SQL Server只能让指定的机器连接。
- 在如今的Web设计中,图片的应用是必不可少的,为了更好地设计网站效果,大体积的图片被越来越多地应用到Web设计中来,所以,更好地优化图片文件
- vue使用formData传递文件类型的数据1.需求 传递文件类型的数据和其
- 今晚想实现这样一个功能:将输入字符串中的字母 “i” 变成字母 “p”。当时想的很简单,直接用for循环遍历,然后替代,出问题的代码如下:n
- 今天来分享一个“高大上”的技术——使用python编写一个可以用微信远程控制电脑的程序!先来分析一下控制的具体流程:我们使用微信给特定的邮箱
- PyCaret 是一个开源、低代码的 Python 机器学习库,可自动执行机器学习工作流。它是一种端到端的机器学习和模型管理工具,可以以指数
- 如何删除某个字段的最后四个字符我们有的时候在进行数据操作的时候,会遇到一些情况,例如有的时候,某个字段会多出现多余的东西。比如城市code
- 本文实例分析了php5.4传引用时报错问题。分享给大家供大家参考,具体如下:php5.3系列版本以及以前版本,传引用没有什么问题,升级到ph
- 大家好,我是不学前端的前端程序员,事情是这个样子的,前几天不是双十一预购秒杀嘛由于我女朋友比较笨,手速比较慢,就一直抢不到,她没抢到特价商品
- 在这里选择使用哪个版本的interpreter:下拉框里选择show all可以看见目前已有的点击添加按钮:可以选择system inter
- 利用上一篇的框架,再写了个翻转棋的程序,为了调试minimax算法,花了两天的时间。几点改进说明:拆分成四个文件:board.py,play
- 条条框框的报表页面枯燥乏味?不妨给页面加点“新意”!前阵子,在看天气预报的时候,发现免费天气预报的调用代码,瞬间想到可以给我开发的报表“润润
- 在进行数据科学任务时,一般会用到交互式开发环境,即Jupyter Notebook,Jupyter lab是Jupyter Notebook
- Pycharm创建的项目,使用了虚拟环境,对库的版本进行管理;有些项目的对第三方库的版本 要求不同,可使用虚拟环境进行管理直接想通过pip命
- 这篇文章主要介绍了Python读取csv文件实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友
- 阅读上一篇:FrontPage XP设计教程1——站点初建与管理接下来的工作就是读者朋友们最为关心的网页的制作和编辑了。我们知道,一个站点是
- 一、前言forEach和map是数组的两个方法,作用都是遍历数组。在vue项目的处理数据中经常会用到,这里介绍一下两者的区别和具体用法示例。
- 1、二者的区别apply(): 非异步(子进程不是同时执行的),堵塞主进程。它的非异步体现在:一个一个按顺序执行子进程, 子进程不