opencv实践-图像去畸变

news2024/11/22 21:03:34

目录

  • 1.背景
  • 2.镜头成像畸变原因
  • 3.去畸变方法
  • 4. opencv去畸变函数
  • 5.代码实现

1.背景

由于相机的镜头并不完全理想,成像时会产生线条扭曲、失真等。对双目图像、鸟瞰图等进行处理时,首先要矫正去畸变。

2.镜头成像畸变原因

相机的镜头前有一块透镜,由于透镜的形状,当光线穿过透镜时,靠近光轴的光线折射比远离光轴的折射要小,就会产生径向畸变,此时真实世界中的直线在图像中会被弯曲,往外弯曲是枕形畸变,如下图(b),往里弯曲是桶形畸变,如下图(c)
在这里插入图片描述
由于透镜不可能完全与相机里的成像面平行,就会造成切向畸变

3.去畸变方法

假设归一化平面上的点P(x, y),可用极坐标(r, θ)表示,r就是P与归一化平面原点之间的距离,径向畸变就可以视为坐标点沿着距离方向发生改变,可以用畸变参数k1,k2,k3来修正;切向畸变可以看作坐标点的水平夹角发生改变。用多项式进行畸变拟合:
在这里插入图片描述
将这些畸变后的点在像素平面上的坐标计算出来:
在这里插入图片描述
然后把畸变后的像素放回原本的位置,即去除了畸变。

4. opencv去畸变函数

void undistort( InputArray src, OutputArray dst,
                             InputArray cameraMatrix,
                             InputArray distCoeffs,
                             InputArray newCameraMatrix = noArray() );

src 输入图像
dst 输出图像
cameraMatrix 相机内参
distCoeffs 畸变系数矩阵 顺序是[k1, k2, p1, p2]

5.代码实现

int main()
{
	cv::Mat img = cv::imread("C:\\Users\\Administrator\\Desktop\\20210706221702710.png");
	cv::Mat k = cv::Mat::eye(3, 3, CV_32FC1);   // 内参矩阵
	k.at<float>(0, 0) = 458.654;
	k.at<float>(0, 1) = 0;
	k.at<float>(0, 2) = 367.215;
	k.at<float>(1, 0) = 0;
	k.at<float>(1, 1) = 457.296;
	k.at<float>(1, 2) = 248.375;
	k.at<float>(2, 2) = 1;

	cv::Mat d = cv::Mat::zeros(1, 4, CV_32FC1); // 畸变系数矩阵 顺序是[k1, k2, p1, p2]
	d.at<float>(0, 0) = -0.28340811;
	d.at<float>(0, 1) = 0.07395907;
	d.at<float>(0, 2) = 0.00019359;
	d.at<float>(0, 3) = 1.76187114e-05;

	cv::Mat img_distort, img_absdiff;
	cv::undistort(img, img_distort, k, d);
	cv::absdiff(img, img_distort, img_absdiff);
		
	cv::imshow("img", img);
	cv::imshow("img_distort", img_distort);
	cv::imshow("img_absdiff", img_absdiff);

	cv::waitKey(0);

	return 0;
}

原图:
一张工厂灰度图,由于畸变导致部分直线条明显被弯曲了
在这里插入图片描述
矫正后的图:
矫正后的图像如下,可见弯曲的线都恢复正常了,但原图部分像素没有还原(落在了矫正后图像的外面)
在这里插入图片描述

参考:https://blog.csdn.net/qq_41035283/article/details/118531027

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

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

相关文章

python+vue垃圾分类论坛的设计与实现85l30

环境保护是一项利国利民的重大民生工程,是造福子孙后代的幸福事,基于全面分析我国大学生环境保护教育现状的基础上提出了高校可通过开设环境类通识任选课、专业课中融入环境保护教育、环境保护实践教学、环境保护第二课堂等有效途径加强对非环境类专业大学生环境保护教育。 本系…

拥挤聚集智能监测算法

拥挤聚集智能监测算法可以通过yolov7网络模型深度学习框架对人员数量、密度等进行实时监测&#xff0c;拥挤聚集智能监算法识别出拥挤聚集的情况&#xff0c;并及时发出预警。YOLOv7 的发展方向与当前主流的实时目标检测器不同&#xff0c;它能够同时支持移动 GPU 和从边缘到云…

开源日志监控采集平台ELKF

---------------------- FilebeatELK 部署 ---------------------- Node1节点&#xff08;2C/4G&#xff09;&#xff1a;node1/192.168.179.20 Elasticsearch Node2节点&#xff08;2C/4G&#xff09;&#xff1a;node2/192.168.179.23 …

All in ECP,转转一站式ES数据清洗解决方案

1. 业务背景 转转作为国内头部的循环经济产业公司&#xff0c;目前业务架构是中台模式。中台负责提供通用的交易能力&#xff0c;灵活快速响应业务需求&#xff0c;业务方负责前台探索创新&#xff0c;为用户提供有价值的服务。 转转交易中台目前分为基础服务、订单、促销、天路…

《深度思维》跨越式*

参考&#xff1a; https://www.zhihu.com/tardis/zm/art/410244111?source_id1005 从思维的技术到思维的格局&#xff0c;再到专注努力与漫长人生中坚忍的精神图腾&#xff0c;作者通过方法理论与案例相结合&#xff0c;介绍了深度思思维的学习方法。 深度思维简介 拥有较长的…

手机一开,说办就办!指尖上的“数字江西”

数字江西科技有限公司&#xff08;下简称“数字江西”&#xff09;是经省委省政府同意&#xff0c;由江西省信息中心&#xff08;大数据中心&#xff09;管理的国有控股合资公司&#xff0c;于2020年3月2日成立&#xff0c;是江西省人民政府的重要实践&#xff0c;也是江西省委…

opencv_c++学习(二十三)

一、点拟合操作 拟合含义如上图&#xff0c;即为通过已知点去拟合一条直线或者一个多边形。 直线拟合函数&#xff1a; fitLine(lnputArray points, OutputArray line, int distType, double param, double reps, double aeps)points:输入待拟合直线的2D或者3D点集。 line:输…

【2023 · CANN训练营第一季】MindSpore模型快速调优攻略 第二章——MindSpore调试调优

1.生态迁移 生态迁移工具使用示例 生态迁移工具技术方案 不同框架间模型定义前端表达差别巨大(相同算子的API技术难点 、 算子功能、模型构建方式差别较大)&#xff1b; 对于同一框架&#xff0c;不管前端表达差异如何&#xff0c;最终对应的计算 图是相似的。因此提出&#x…

node.js+vue房屋租赁管理系统z0g8w

本系统主要包括以下功能模块&#xff1a;租户、出租人、房源信息、预约看房、合同信息等模块。 其中设计的主要功能如下&#xff1a; &#xff08;1&#xff09;用户的注册和登录本系统&#xff0c;登录到系统的首页。 &#xff08;2&#xff09;用户可以发布自己的房源信息…

快速了解iptables

初识 iptables是什么&#xff1f; iptables是一个在Linux操作系统上使用的防火墙工具&#xff0c;它可以用于配置和管理网络数据包的过滤、转发和修改等操作。 过滤数据包&#xff1a;iptables可以根据不同的规则过滤网络数据包&#xff0c;例如根据源IP地址、目标IP地址、端…

如何在华为OD机试中获得满分?Java实现【不含101的数】一文详解!

✅创作者&#xff1a;陈书予 &#x1f389;个人主页&#xff1a;陈书予的个人主页 &#x1f341;陈书予的个人社区&#xff0c;欢迎你的加入: 陈书予的社区 &#x1f31f;专栏地址: Java华为OD机试真题&#xff08;2022&2023) 文章目录 1. 题目描述2. 输入描述3. 输出描述…

开源开放 生态共建 | openKylin社区单位会员突破200家!

当前&#xff0c;开放、协作、共享的开源模式已成为全球软件技术和产业创新的主导&#xff0c;也为信息技术国产自主化提供了强大助力。openKylin作为中国桌面操作系统开源社区&#xff0c;以聚焦桌面操作系统根技术为核心、以孵化相关领域关键项目为目标、以布道开源文化为抓手…

堪称「史上最详细」的整车信息安全强标将发布!释放了哪些信号?

确保汽车整车信息安全&#xff0c;或成为车企们继智能化竞争的下一个竞争焦点。 可以说&#xff0c;在智能化、网联化的驱动下&#xff0c;智能汽车成为了数据收集、数据传输、数据处理的关键节点&#xff0c;消费者在享受汽车智能化带来便利的同时&#xff0c;也逐渐重视智能…

【操作系统复习】第8章 文件管理

数据项、记录和文件 数据项 ➢ 基本数据项&#xff1a;描述一个对象的某种属性&#xff0c;又称字段 ➢ 组合数据项&#xff1a;由若干个基本数据项组成记录 ➢ 记录是一组相关数据项的集合&#xff0c;用于描述一个对象在某方面的属性。 ➢ 关键字&#xff1a;唯一能…

04_GC垃圾回收

面试题&#xff1a; JVM内存模型以及分区&#xff0c;需要详细到每个区放什么 堆里面的分区&#xff1a;Eden&#xff0c;survival from to&#xff0c;老年代&#xff0c;各自的特点。 GC的三种收集方法&#xff1a;标记清除、标记整理、复制算法的原理与特点&#xff0c;分…

python+vue高校网上跳蚤二手市场的设计与实现

商品信息是卖家供应用户必不可少的一个部分。在跳蚤市场发展的整个过程中&#xff0c;商品担负着最重要的角色。为满足如今日益复杂的管理需求&#xff0c;各类管理系统程序也在不断改进。本课题所设计的普通高校网上跳蚤市场&#xff0c;使用Django框架&#xff0c;Python语言…

【2023年电工杯数学建模竞赛】选题分析+A题B题完整思路+代码分享

思路和代码会第一时间分享出来&#xff0c;可以先关注博主 1.竞赛介绍 2.本次大赛选题分析 首先大家要清楚获奖只和比例有关&#xff0c;和具体题目关系不大&#xff0c;不会出现选难题就比简单题获奖率高很多的情况出现&#xff0c;这是一个选拔性质的比赛是按照比例来的 2…

(5.19-5.25)【大数据新闻速递】

关 注gzh“大数据食铁兽”&#xff0c;了解更多大数据快讯 【第八届亚太银行数字化创新峰会圆满落幕】 第八届亚太银行数字化创新峰会在2023年5月18日举行&#xff0c;邀请了30名大咖和超过300位行业顶尖人士参加。金融数据港和中银协中西部培训机构提供特别支持。峰会围绕银行…

Kafka实时数据即席查询应用与实践

作者&#xff1a;vivo 互联网搜索团队- Deng Jie Kafka中的实时数据是以Topic的概念进行分类存储&#xff0c;而Topic的数据是有一定时效性的&#xff0c;比如保存24小时、36小时、48小时等。而在定位一些实时数据的Case时&#xff0c;如果没有对实时数据进行历史归档&#xff…

list的基本介绍

list的基本信息&#xff1a; list是一个带头双向链表的结构。constant&#xff0c;常数、常量&#xff0c;constant time 即O(1)时间复杂度。 先来简单认识一下list list支持尾插&#xff0c;尾删&#xff0c;头插&#xff0c;头删 都是一些已知的内容。 和vector的区别就是支…