opencv实践-图像去畸变

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

1.背景

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

2.镜头成像畸变原因

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

3.去畸变方法

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

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;
}

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

参考:https://blog.csdn.net/qq_41035283/article/details/118531027文章来源地址https://www.toymoban.com/news/detail-598027.html

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

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

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

相关文章

  • 1、opencv相机畸变矫正

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

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

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

    2024年02月15日
    浏览(34)
  • 相机的畸变矫正与opencv代码说明

    图像算法中会经常用到摄像机的畸变校正,有必要总结分析OpenCV中畸变校正方法,其中包括普通针孔相机模型和鱼眼相机模型fisheye两种畸变校正方法。普通相机模型畸变校正函数针对OpenCV中的cv::initUndistortRectifyMap(),鱼眼相机模型畸变校正函数对应OpenCV中的cv::fisheye::initUndi

    2024年02月14日
    浏览(39)
  • python opencv多路视频畸变矫正与显示

    用于测试的计算机配置如下: 计算机为八核Intel(R) Xeon(R) CPU E3-1230 V2 @ 3.30GHz 注意:文中所说的cpu使用率是指该算法占用的cpu使用率 测试用的视频规格为1920*1080 做一路视频的去除畸变 cpu的使用率为126.9% 多路视频去除畸变显示 三路视频去除畸变显示代码如下: import cv2 import numpy

    2023年04月09日
    浏览(35)
  • 六.图像处理与光学之镜头畸变矫正LDC

    海思35xx芯片专门有一个模块GDC(Geometry Distortion Correction)来对畸变图片进行校正。它里面其实有两个应用case,一个是fisheye校正,另外一个是LDC镜头畸变校正。 畸变主要存在与镜头FOV大的产生ÿ

    2024年02月11日
    浏览(44)
  • OpenCvSharp (C# OpenCV) 二维码畸变矫正--基于透视变换(附源码)

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

    2024年02月15日
    浏览(36)
  • opencv图像去畸变

    对于目标图像(无畸变图像)上的每个像素点,转换到normalize平面,再进行畸变变换,进行投影,得到这个像素点畸变后的位置,然后将这个位置的源图像(畸变图像)的像素值作为目标图像该点的像素值。 通常我们得到的原图是畸变后的图像(x_distort,y_distort),要计算畸变之前

    2024年02月07日
    浏览(43)
  • OpenCV图像矫正技术基础

    OpenCV图像矫正技术是一种基于计算机视觉技术的图像处理技术,能够将一张图像进行矫正,使得图像看起来更加规则、清晰。 OpenCV图像矫正技术的实现思路: 1、获取图像:首先需要获取要处理的图像,对图像进行预处理,将图像转换成一种可用的格式,例如OpenCV中的Mat格式

    2024年02月13日
    浏览(39)
  • OpenCV图像矫正

    1. 针对边缘比较明显的图片,使用基于轮廓提取的矫正方法。 基本步骤: 1)变为灰度图; 2)Canny边缘检测: Canny算法的基本思想是寻找一张图片中灰度强度变化最强(梯度方向)的位置; 3)使用 OpenCV 的 findcontours() 提取轮廓(一个轮廓对应一组点集); 4)根据轮廓求最

    2024年02月04日
    浏览(38)
  • OpenCV利用透视变换矫正图像

    案例:使用OpenCV将一张折射的图片给矫正过来 实现步骤: 1.载入图像 2.图像灰度化 3.二值分割 4.形态学操作去除噪点 5.轮廓发现 6.使用霍夫直线检测,检测上下左右四条直线(有可能是多条,但是无所谓) 7.绘制出直线 8.寻找与定位上下左右是条直线 9.拟合四条直线方程 1

    2024年02月06日
    浏览(62)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包