opencv图像畸变矫正:源码学习

这篇具有很好参考价值的文章主要介绍了opencv图像畸变矫正:源码学习。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

参考资料:相机标定(4) 矫正畸变 undistort()和initUndistortRectifyMap()

背景:opencv提供了直接进行畸变矫正的代码,因在项目中需要使用畸变矫正,因此研究一下opencv中畸变矫正的相关接口与代码,便于学习提升与二次开发。

1、畸变矫正原理

opencv在文档中对相机标定与畸变矫正的原理做了简单介绍,可参考链接:opencv的标定与3d重建模块文档链接,此外网上也有较多的内容对畸变矫正原理进行了讲解,因此本文在此不做详细介绍。

opencv畸变矫正,图像处理,数码相机,计算机视觉,opencv

 2、opencv提供的畸变矫正接口

opencv提供了可以直接使用的矫正算法,即通过cv::calibrateCamera 得到内参与畸变系数,然后使用cv::undistort 函数一次性完成图像的畸变矫正;也可以通过initUndistortRectifyMap()和remap()的组合来处理。

1)initUndistortRectifyMap()

void cv::initUndistortRectifyMap	(	InputArray 	cameraMatrix,
                                        InputArray 	distCoeffs,
                                        InputArray 	R,
                                        InputArray 	newCameraMatrix,
                                        Size 	size,
                                        int 	m1type,
                                        OutputArray 	map1,
                                        OutputArray 	map2 
                                    )	
  • cameraMatrix:相机矩阵,包含相机的内部参数(焦距、光心等)。
  • distCoeffs:畸变系数,用于描述相机的畸变情况(径向畸变和切向畸变)。
  • R:校正变换矩阵,用于将输入图像校正为校正后的输出图像。
  • newCameraMatrix:校正后的相机矩阵,可以自定义或者使用校正变换矩阵生成。
  • size:输出图像的尺寸。
  • m1type:输出映射表map1的数据类型。
  • map1map2:输出的映射表,存储输入图像到输出图像的像素坐标映射关系。

作用说明:函数的作用是根据相机的内部参数、畸变系数、校正变换矩阵和输出图像的尺寸等信息,计算出一个映射表,其中包含了每个输入图像像素对应的输出图像位置。通过这个映射表,可以将输入图像中的像素根据校正后的映射关系重构成校正后的输出图像,从而实现相机畸变的校正。

2)remap()

cv::remap是重映射函数,通常用来纠正校准的立体图像。参考:OpenCV图像处理——重映射 remap函数

3)cv::undistort

void cv::undistort	(	InputArray 	src,
                    OutputArray 	dst,
                    InputArray 	cameraMatrix,
                    InputArray 	distCoeffs,
                    InputArray 	newCameraMatrix = noArray() 
                    )	
  • src:输入图像,可以是单通道或多通道的图像。
  • dst:输出图像,校正后的图像将存储在此处。
  • cameraMatrix:相机矩阵,包含相机的内部参数(焦距、光心等)。
  • distCoeffs:畸变系数,用于描述相机的畸变情况(径向畸变和切向畸变)。
  • newCameraMatrix:校正后的相机矩阵,可以自定义或者使用默认值noArray()。如果指定了新的相机矩阵,函数将根据新相机矩阵对图像进行校正;否则,将使用原始相机矩阵进行校正。

作用说明:函数的作用是根据提供的相机参数,对输入图像直接进行相机畸变校正。

4)cv::undistortPoints
 

上面介绍的都是对整张图像进行畸变矫正,这样子实际上是比较慢的,我在项目中实际遇到的也是对几个像素点的畸变矫正,经过查找发现有这个函数。

void cv::undistortPoints	(	InputArray 	src,
                            OutputArray 	dst,
                            InputArray 	cameraMatrix,
                            InputArray 	distCoeffs,
                            InputArray 	R = noArray(),
                            InputArray 	P = noArray() 
                            )	
  • src:输入的像素点坐标,可以是一个N x 11 x N的矩阵,表示N个像素点。
  • dst:输出的校正后的像素点坐标,校正后的像素点将存储在此处,与输入矩阵具有相同的维度和类型。
  • cameraMatrix:相机矩阵,包含相机的内部参数(焦距、光心等)。
  • distCoeffs:畸变系数,用于描述相机的畸变情况(径向畸变和切向畸变)。
  • R:旋转矩阵,可选参数,默认值为noArray()。如果指定了旋转矩阵,函数将根据旋转矩阵对像素点进行校正;否则,将不考虑旋转变换。
  • P:投影矩阵,可选参数,默认值为noArray()。如果指定了投影矩阵,函数将根据投影矩阵对像素点进行校正;否则,将不考虑投影变换。

3、源码学习

先休息了,明天接着写文章来源地址https://www.toymoban.com/news/detail-693924.html

到了这里,关于opencv图像畸变矫正:源码学习的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • OpenCvSharp (C# OpenCV) 二维码畸变矫正--基于透视变换(附源码)

        本文主要介绍如何使用OpenCvSharp中的透视变换来实现二维码的畸变矫正。     由于CSDN文章中贴二维码会导致显示失败,大家可以直接点下面链接查看图片:     C# OpenCV实现二维码畸变矫正--基于透视变换 (详细步骤 + 代码)      讲解实现步骤之前先看下效果(左边是原图

    2024年02月15日
    浏览(39)
  • OpenCV开发笔记(七十七):相机标定(二):通过棋盘标定计算相机内参矩阵矫正畸变摄像头图像

    若该文为原创文章,转载请注明原文出处 本文章博客地址:https://hpzwl.blog.csdn.net/article/details/136616551 各位读者,知识无穷而人力有穷,要么改需求,要么找专业人士,要么自己研究 红胖子(红模仿)的博文大全:开发技术集合(包含Qt实用技术、树莓派、三维、OpenCV、OpenGL、

    2024年03月13日
    浏览(48)
  • K210入门使用处理图像畸变方法

           在嵌入式开发中通常会使用到视觉方面的硬件做图像识别, 经常使用的小型嵌入式图像识别硬件有个K210,Openmv等,这里介绍的是K210这款可编程机器视觉硬件,它支持一系列广泛的图像处理和神经网络,其最突出的优点是它的算力可以达到1TOPS算力,连我们的树莓派

    2024年02月15日
    浏览(47)
  • OpenCv.js(图像处理)学习历程

    opencv.js官网 以下内容整理于opencv.js官网。 OpenCV由Gary Bradski于1999年在英特尔创建。第一次发行是在2000年。OpenCV支持c++、Python、Java等多种编程语言,支持Windows、Linux、Os X、Android、iOS等平台。基于CUDA和OpenCL的高速GPU操作接口也在积极开发中。OpenCV.js将OpenCV带到开放的web平台,

    2024年02月14日
    浏览(39)
  • OpenCV图像处理学习十,图像的形态学操作——膨胀腐蚀

    一.形态学操作概念 图像形态学操作是指基于形状的一系列图像处理操作的合集,主要是基于集合论基础上的形态学数学对图像进行处理。 形态学有四个基本操作:腐蚀、膨胀、开操作、闭操作,膨胀与腐蚀是图像处理中最常用的形态学操作手段。 二.形态学操作-膨胀 跟卷积

    2024年02月05日
    浏览(55)
  • 1、opencv相机畸变矫正

    2.1保存矩阵 2.1直接使用保存的矩阵

    2024年02月11日
    浏览(46)
  • OpenCV实战:从图像处理到深度学习的全面指南

    本文深入浅出地探讨了OpenCV库在图像处理和深度学习中的应用。从基本概念和操作,到复杂的图像变换和深度学习模型的使用,文章以详尽的代码和解释,带领大家步入OpenCV的实战世界。 OpenCV(Open Source Computer Vision Library)是一个开源的计算机视觉和机器学习软件库。它由一

    2024年02月14日
    浏览(45)
  • opencv对相机进行畸变矫正,及矫正前后的坐标对应

    目前有个项目,需要用到热成像相机。但是这个热成像相机它的畸变比较厉害,因此需要用标定板进行标定,从而消除镜头畸变。 同时需要实现用户用鼠标点击校正后的画面后,显示用户点击位置的像素所代表的温度。 另外热成像sdk中还有个功能:选定一个rect,可以返回这

    2024年02月15日
    浏览(35)
  • ROS学习笔记15:ROS与OpenCV结合处理图像

      安装OpenCV sudo apt-get install ros-kinetic-vision-opencv libopencv-dev python-opencv   ROS进行图像处理是依赖于OpenCV库的。ROS通过一个叫CvBridge的功能包,将获取的图像数据转换成OpenCV的格式,OpenCV处理之后,传回给ROS进行图像显示(应用),如下图:   我们使用ROS驱动获取摄像头数

    2024年02月05日
    浏览(42)
  • 深度学习图像处理基础工具——opencv 实战信用卡数字识别

    任务 信用卡数字识别 穿插之前学的知识点  形态学操作 模板匹配 等 总体流程与方法 1.有一个模板 2 用轮廓检测把模板中数字拿出来 外接矩形(模板和输入图像的大小要一致 )3 一系列预处理操作 问题的解决思路 1.分析准备:准备模板,读取文件——转化为灰度图——转化

    2024年04月15日
    浏览(54)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包