Python+Opencv4点仿射变换

目录

    • 一、场景需求解读
    • 二、算法原理简介
    • 三、算法实现步骤
    • 四、算法代码实现
    • 五、算法效果展示与分析
    • 六、思维拓展
    • 参考资料
    • 注意事项

一、场景需求解读

  在处理现实生活中的图像处理问题时,我们经常会遇到一种情况-即我们将要处理的目标的位置是斜的,我们需要使用仿射变换进行矫正。当你做了很多现实场景中的案例之后,你就会发现这是一个非常通用的模块,因而本篇博客针对这个问题进行了详细的论述,具体的案例如下图所示,左边表示的是原始的输入图片,该图片中的目标是斜放的,我们要做的任务就是将其矫正过来。
在这里插入图片描述

二、算法原理简介

  整个算法的原理比较简单,我们的目标是将倾斜的目标矫正过来。首先,我们需要使用轮廓检测等其它方法获取到目标的4个关键点坐标值;然后利用相应的变换关系获取到新的4个坐标点;接着利用这4对关键点计算出仿射变换矩阵M;最后应用仿射变换矩阵到目标中即可。

三、算法实现步骤

步骤1-读取输入图片;
步骤2-获取原始目标的4个坐标点(左上,左下,右上,右下);
步骤3-通过4个坐标点计算出新的坐标点;
步骤4-使用opencv计算仿射变换矩阵M;
步骤5-应用仿射变换进行变换并进行结果显示。

四、算法代码实现

four_point_transform.py

# coding=utf-8
# 导入相应的python包
import numpy as np
import cv2def order_points(pts):# 初始化坐标点rect = np.zeros((4, 2), dtype = "float32")# 获取左上角和右下角坐标点s = pts.sum(axis = 1)rect[0] = pts[np.argmin(s)]rect[2] = pts[np.argmax(s)]# 分别计算左上角和右下角的离散差值diff = np.diff(pts, axis = 1)rect[1] = pts[np.argmin(diff)]rect[3] = pts[np.argmax(diff)]return rectdef four_point_transform(image, pts):# 获取坐标点,并将它们分离开来rect = order_points(pts)(tl, tr, br, bl) = rect# 计算新图片的宽度值,选取水平差值的最大值widthA = np.sqrt(((br[0] - bl[0]) ** 2) + ((br[1] - bl[1]) ** 2))widthB = np.sqrt(((tr[0] - tl[0]) ** 2) + ((tr[1] - tl[1]) ** 2))maxWidth = max(int(widthA), int(widthB))# 计算新图片的高度值,选取垂直差值的最大值heightA = np.sqrt(((tr[0] - br[0]) ** 2) + ((tr[1] - br[1]) ** 2))heightB = np.sqrt(((tl[0] - bl[0]) ** 2) + ((tl[1] - bl[1]) ** 2))maxHeight = max(int(heightA), int(heightB))# 构建新图片的4个坐标点dst = np.array([[0, 0],[maxWidth - 1, 0],[maxWidth - 1, maxHeight - 1],[0, maxHeight - 1]], dtype = "float32")# 获取仿射变换矩阵并应用它M = cv2.getPerspectiveTransform(rect, dst)# 进行仿射变换warped = cv2.warpPerspective(image, M, (maxWidth, maxHeight))# 返回变换后的结果return warped

transform_example.py

# coding=utf-8# 导入相应的python包
from pyimagesearch.transform import four_point_transform
import numpy as np
import argparse
import cv2# 进行参数设置和参数解析
ap = argparse.ArgumentParser()
ap.add_argument("-i", "--image", help = "path to the image file")
ap.add_argument("-c", "--coords", help = "comma seperated list of source points")
args = vars(ap.parse_args())# 读取图片
image = cv2.imread(args["image"])
# 获取原始的坐标点
pts = np.array(eval(args["coords"]), dtype = "float32")# 对原始图片进行变换
warped = four_point_transform(image, pts)# 结果显示
cv2.imshow("Original", image)
cv2.imshow("Warped", warped)
cv2.waitKey(0)

五、算法效果展示与分析

python transform_example.py --image images/example_01.png --coords “[(73, 239), (356, 117), (475, 265), (187, 443)]”
在这里插入图片描述
python transform_example.py --image images/example_02.png --coords “[(101, 185), (393, 151), (479, 323), (187, 441)]”
在这里插入图片描述
python transform_example.py --image images/example_03.png --coords “[(63, 242), (291, 110), (361, 252), (78, 386)]”
在这里插入图片描述
  上图展示了不同倾斜角度下的校正结果,通过观察,哦我们可以发现该算法可以很好的对倾斜的目标进行矫正,而且可以获得很好的矫正效果。

六、思维拓展

  通过上面的观察,聪明的你可以观察到了一个问题,即这个算法的前提是首先需要准确的获取目标的4个关键点,常用的方法是轮廓获取法;除此之外,测试的图片背景比较单一,而现实场景中的图片背景比较复杂,会存在很多的干扰信息,因而准确的获得目标的4个关键点就成为了一个比较困难的问题。对于下面的一幅图,如何准确的获取图中的白色A4纸并进行仿射矫正呢?
在这里插入图片描述

参考资料

[1] 参考链接

注意事项

[1] 如果您对AI、自动驾驶、AR、ChatGPT等技术感兴趣,欢迎关注我的微信公众号“AI产品汇”,有问题可以在公众号中私聊我!
[2] 该博客是本人原创博客,如果您对该博客感兴趣,想要转载该博客,请与我联系(qq邮箱:1575262785@qq.com),我会在第一时间回复大家,谢谢大家的关注.
[3] 由于个人能力有限,该博客可能存在很多的问题,希望大家能够提出改进意见。
[4] 如果您在阅读本博客时遇到不理解的地方,希望您可以联系我,我会及时的回复您,和您交流想法和意见,谢谢。
[5] 本文测试的图片可以通过关注微信公众号AI产品汇之后找我索取。
[6] 本人业余时间承接各种本科毕设设计和各种小项目,包括图像处理(数据挖掘、机器学习、深度学习等)、matlab仿真、python算法及仿真等,有需要的请加QQ:1575262785详聊,备注“项目”!!!

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

一图了解券商IT战略咨询方法论

00.项目管理 00.客户信息调研 01.售前方案 00.交流方案 IT战略规划咨询服务方案(XX证券)v1.5_20191120.pdf 01.立项资料 XX证券IT规划咨询项目立项报告V1.0-20200401(1).docx 02.投标方案 03.商务合同 04.项目启动 XX证券IT规划咨询项目启动会材…

财管U08 公司估值 教材笔记

对罗斯《公司理财》教材的笔记汇总,参考了CPA《财务成本管理》教材。备考金融硕士431专业课时,写下公司理财和投资学的教材、习题共4个系列笔记,集百家之长、成一家之言,冀能与有缘人交流,助各位江湖朋友解惑。 格式…

量化交易 实战第六课 市值中性化选股

量化交易 实战第六课 市值中性化选股 概述代码实现 概述 本篇我们会利用我们之学到的因子数据处理的技术来实现一个市值中性化选股的策略. 代码实现 # 可以自己import我们平台支持的第三方python模块,比如pandas、numpy等。 # 1. 获取市值和市净率因子数据 # 因子…

从博弈论看高薪行业岗位

有人说,站在你当下的时间点上,至少接下来的5年内,我们所度过的每一年都将是过去最差的一年,也是未来最好的一年。听了这句话,让人不由地感叹,难道我们所处的这个时代真的有那么不堪吗?虽然还是不…

点击button会自动刷新页面??

前言: 今天用了原生的html与js写页面,突然发现,在form标签里写的button,点击button标签会刷新页面。显而易见,对于半路出家,基础知识薄弱的我来说,这实在是unbelivablely,于是网上一…

Pgadmin4转圈圈无法进入到界面(pgadmin v4一直卡在loading页面)

原文:https://blog.csdn.net/qna17/article/details/110469846 解决方法: 1、打开Registry Editor,点击进入开始菜单,然后输入【regedit】,点击进入上方的【注册表编辑器】 然后就进入注册表编辑器了,如图…

gulp-connect实现页面实时自动刷新

gulp-connect实现页面实时自动刷新,解放F5 gulpfile.js var gulp require(gulp), //本地安装gulp所用到的地方connect require(gulp-connect);//自动刷新//定义html任务 gulp.task(html, function () {gulp.src(html/index.html)//指定被刷新的html路径.pipe(conn…

操盘机器人闪亮登场,不出意外大盘还将回调2到3天,图中虚线用于预测大盘走势从未失误过哦

不出意外大盘还将回调2到3天,图中虚线用于预测大盘走势从未失误过哦 1、具备各种分析指标及模型,能自动分析选股 2、能自动做T,自动下单买卖 3、具备实时监控功能 4、具备语音识别、语音提醒功能 5、具备实时采集各种股票交易等相关数据的功能…

股票电话营销的好消息,奔走相告------股票电话机器人上线

股票呼叫专用电话机器人已正式上线, 无需听录音看通话内容,不需要人工挨个听录音,直接把愿意加微信的客户推送到员工的账户里。流程标签设置微信和保微信号。 一键筛选意向客户进入微信管理,在线的员工能接收到意向客户&#xff0…

白宫召见科技巨头 讨论AI潜在风险 以确保人们从创新中受益

ChatGPT的问世,被认为是通用人工智能发展的“奇点”和强人工智能即将到来的“拐点”,甚至有业内人士推测所有数字化系统和各个行业都可能被其重新“洗牌”。 乐观主义者表示,人工智能的核心是对人类大脑的模拟,其目的是延伸和增强…

IFR:2020年全球专业服务机器人市场达到67亿美元

全球专业服务机器人市场营业额达到67亿美元,2020年增长12%。与此同时,新的消费者服务机器人的营业额增长了16%,达到44亿美元。 服务机器人用例TOP 5 1/3的机器人是为运输货物而建造的。自动移动机器人(AMR)和送货机器…

小i机器人冲刺美股:最高募资5280万美元 阿里与吉利是股东

雷递网 雷建平 2月14日 小i机器人(股票代码为:“XI”)日前向美国SEC更新招股书,并公布发行区间为6.8美元到8.8美元,此次准备发行600万股ADS,最高募资5280万美元。 小i机器人预计近期在美国纳斯达克上市。 小…

忆享聚焦|软件营收76814亿、全球首款注射疫苗机器人面世……互联网一线资讯最新出炉

“忆享聚焦”栏目第二期来啦!本栏目汇集互联网最新资讯,聚焦前沿科技,关注行业发展动态,筛选高质量讯息,拓宽用户视野,让您以最低的时间成本获取最有价值的行业资讯。 本期目录 行业资讯 1.我国软件业务收…

上海亚商投顾:沪指延续调整 机器人概念股掀涨停潮

上海亚商投顾前言:无惧大盘涨跌,解密龙虎榜资金,跟踪一线游资和机构资金动向,识别短期热点和强势个股。 市场情绪 大小指数今日略显分化,沪指全天震荡调整,深成指、创业板指则拉升翻红。机器人概念股掀涨停…

给互联网人的5点吐血建议

1. 前五年打造自己的专业深度 首先最重要一点,不管你是哪个行业,做的什么工作,技术、产品也好,设计、运营也罢,本职的专业能力一定是最重要的,尤其是工作的前五年,专业能力一定是放在第一位的&…

AI大模型创业:诸神之战,凡人无缘?

文|光锥智能,作者|郝鑫 “白驹过隙,我也计划走向职业生涯的下一个挑战。” 图片来自朋友圈 3月21日,被誉为“AI框架领域第一华人”的阿里技术副总裁贾扬清在其朋友圈官宣离职,该消息犹如一颗重磅炸弹投向了…

三毛:《求婚》

请你讲给我听,当年你如何向妈妈求婚?”我坐在爸爸身边,把他的报纸弹一弹——爸在报纸背后。 “我没有向她求婚。”爸说。 “那她怎么知道你要娶她?” “要订婚就知道了嘛!” “那你怎么告诉她要订婚?” “我…

情人节求婚PPT模板

模板介绍 一份高质量的PPT模板,可以让你在日常的工作中展示自我、脱颖而出、去赢得更多机会,今天小编分享一份精美的情人节求婚PPT模板 PPT模板名称:情人节求婚PPT模板,模板编号:P51145,大小10MB&#xff…

程序员花式求婚,惊呆众人,谁还敢说程序员不懂浪漫

很多人都会想,程序员都是一群不懂的浪漫,比较木讷,其实程序员也都有自己新中的浪漫,给大家分享一个前段时间看到的事情吧 为了向心中的女神求婚,每个男生都会挖空心思地想出一些非常特别的创意。 例如这位网名叫做 LA pike 的程序员,他为了向交往已久的女友求婚,利用自…

用css3做一个求婚小动画

概述 本案例主要是运用到了css3的animation、keyframes、transform等属性,熟悉了,就可以做更多的其他动画效果,这几个属性功能非常强大。 详细 代码下载:http://www.demodashi.com/demo/10335.html 首先,我们先来看看效…