使用OpenCV校准鱼眼镜头-第2部分

重磅干货,第一时间送达

在昨天的文章中我们介绍了有关如何使用OpenCV校准鱼眼镜头的一些基础知识,并我们在最后留下了一个问题。那么今天我们就来看看这个问题该如何解决。

但是,如果大家遇到以下任何一种情况,那就得了解一些细节的问题了。

  • 失真图像的尺寸与校准所用的尺寸不同;

  • 默认不失真设置裁剪掉的像素数量太大,无法接受。

我们需要首先了解什么是“平衡”(在经典cv2模块中也称为“ alpha” ),以及它如何影响未失真图像的尺寸和形状。先来看一个比较极端的图像矫正的例子。

矫正前

矫正后

注意:如您所知,OpenCVfisheye模块通过将角拉伸得过大而过度补偿了角。但这对于大多数图像来说效果都是挺好的。

这里涉及3个不同的维度:

  • dim1。原始图像的尺寸。

  • dim2。这是在使图像不失真之后要保留的尺寸。dim2很难理解,因为它受的影响balance,它基本上告诉OpenCV要保留多少图像。当时balance = 0,OpenCV将保留图像的最佳部分。而balance = 1,OpenCV保留原始图像的每个像素,这意味着很多黑色填充区域和过度拉伸的角。dim2其长宽比必须与相同dim1。

  • dim3。OpenCV将放置未失真图像的最终包装盒的尺寸。它可以是任何大小和任何纵横比。但是大多数情况下,除非想对未失真的图像进行裁剪,否则我们希望使其与原图像相同。

希望下面的程序比正式的OpenCV文档更容易理解。将dim2,dim3和balance(dim1可以从输入图像派生)传递到undistort下面的方法。

# You should replace these 3 lines with the output in calibration stepDIM=XXXK=np.array(YYY)D=np.array(ZZZ)def undistort(img_path, balance=0.0, dim2=None, dim3=None): img = cv2.imread(img_path) dim1 = img.shape[:2][::-1] #dim1 is the dimension of input image to un-distort assert dim1[0]/dim1[1] == DIM[0]/DIM[1], "Image to undistort needs to have same aspect ratio as the ones used in calibration" if not dim2: dim2 = dim1 if not dim3: dim3 = dim1 scaled_K = K * dim1[0] / DIM[0] # The values of K is to scale with image dimension. scaled_K[2][2] = 1.0 # Except that K[2][2] is always 1.0 # This is how scaled_K, dim2 and balance are used to determine the final K used to un-distort image. OpenCV document failed to make this clear! new_K = cv2.fisheye.estimateNewCameraMatrixForUndistortRectify(scaled_K, D, dim2, np.eye(3), balance=balance) map1, map2 = cv2.fisheye.initUndistortRectifyMap(scaled_K, D, np.eye(3), new_K, dim3, cv2.CV_16SC2) undistorted_img = cv2.remap(img, map1, map2, interpolation=cv2.INTER_LINEAR, borderMode=cv2.BORDER_CONSTANT) cv2.imshow("undistorted", undistorted_img) cv2.waitKey(0) cv2.destroyAllWindows()if __name__ == '__main__': for p in sys.argv[1:]: undistort(p)

当然,大家应该尝试不同的值,以了解它们如何改变最终图像,达到一个平衡状态!

交流群

(0)

相关推荐

  • (9条消息) OCR预处理:矫正图片中的文本信息(opencv)

    (9条消息) OCR预处理:矫正图片中的文本信息(opencv)

  • python+opencv图像处理(十二)

    图像仿射变换和透视变换 天晴了...... 1.仿射变换 图像的仿射变换就是图像的旋转加上拉升,说直白点,就是把矩形变成平行四边形. 要把矩形变成平行四边行,只需要拉伸其四个角点就行了,事实上,只需要 ...

  • python+opencv图像处理(十一)

    图像镜像 图像的镜像指的是将图像以某条线为中心进行镜像对换. 图像的镜像根据翻转的方向可分为水平镜像翻转.垂直镜像翻转和对角镜像翻转3种. 水平镜像翻转指的是将图像以y轴为中心进行左右镜像对换. 垂直 ...

  • OpenCV实战(1)

    如果需要处理的原图及代码,请移步小编的GitHub地址 传送门:请点击我 如果点击有误:https://github.com/LeBron-Jian/ComputerVisionPractice 最近 ...

  • 图像旋转90/180 opencv坐标系

    问题描述: 图像旋转90.180.270等 使用类似下面的代码,会有黑边,图像变形之类的问题 其实windows系统自带类似的功能,但是我需要批量处理图像,因此尝试自己写 算法基础: 这种直角的旋转, ...

  • python+opencv图像处理(六)

    图像相加 两幅图像是可以加在一起的. 图像相加是通过对两幅大小相同的图像对应位置像素的相加运算,以产生一幅新的含有两幅图像信息的图像的方法.有时也称为图像合成. 1.(+)法 数学运算中的+可以用于图 ...

  • OpenCV-Python,计算机视觉开发利器

    人工智能,一个已经被谈论了几十年的概念(最早是图灵在1950年提出).如今这几年,相关技术的发展速度是越来越快.高大上如无人驾驶.智能安防.AI辅助诊断,接地气如刷脸支付.内容推荐.自动翻译等,众多领 ...

  • python+opencv图像处理(十)

    图像旋转 本篇主要利用opencv的转换函数warpAffine实现图像的平移和旋转. 1.图像旋转 图像旋转即是根据某个中心点进行旋转. 要进行旋转,要找到中心点,要知道旋转角度,opencv提供了 ...

  • python 图像处理:一福变五福

    快过年了,各种互联网产品都出来撒红包.某宝一年一度的集五福(shua hou)活动更是成为每年的必备活动.虽然到最后每人大概也就分个两块钱,但作为一个全民话题,大多数人还是愿意凑凑热闹.毕竟对于如今生 ...

  • 使用OpenCV校准鱼眼镜头

    重磅干货,第一时间送达 01.简介 当我们使用的鱼眼镜头视角大于160°时,OpenCV中用于校准镜头"经典"方法的效果可能就不是和理想了.即使我们仔细遵循OpenCV文档中的步骤 ...

  • [opencv]吊诡的摄像头黑屏

    #include <opencv2/core.hpp> #include <opencv2/videoio.hpp> #include <opencv2/highgui. ...

  • 内标法是一种间接或相对的气相色谱校准方法以提高分析结果的准确度

    气相色谱的定量分析内标法 内标法是一种间接或相对的气相色谱校准方法.在气相色谱分析测定样品中某组分含量时,加入一种内标物质以校谁和消除出于操作条件的波动而对分析结果产生的影响,以提高分析结果的准确度. ...

  • 如何使用OpenCV实现图像均衡???

    重磅干货,第一时间送达 我们已经练习了很多图像处理--操作图像(精确地说是图像矩阵).为此,我们探索了图像的均衡方法,以便在一定程度上增强对比度,以使被处理的图像看起来比原始图像更好,这种技术称为直方 ...

  • 2021/03/20【失眠】校准身体的“长寿时钟”

    失眠 睡眠与我们的健康和寿命息息相关,好的睡眠是一味"长寿药",能让我们走上长寿之路:反之睡眠不好,各种害怕的疾病都有可能找上门.如何才能调好睡眠,安睡到天亮? 郭院长告诉我们,人 ...

  • 风景和人像的优化校准

    发布日期:2012-03-29 我们在选择优化校准模式时主要考虑的是拍摄对象的光线和色彩情况,而不是拍摄对象的性质.但是,也很难回避通过拍摄对象的性质来选择校准模式的思路.我也常常依照不同拍摄对象来选 ...

  • 219个opencv常用函数汇总

    本文转自|新机器视觉 1.cvLoadImage:将图像文件加载至内存: 2.cvNamedWindow:在屏幕上创建一个窗口: 3.cvShowImage:在一个已创建好的窗口中显示图像: 4.cv ...

  • 基于OpenCV实战:车牌检测

    重磅干货,第一时间送达 拥有思维导图或流程将引导我们朝着探索和寻找实现目标的正确道路的方向发展.如果要给我一张图片,我们如何找到车牌并提取文字? 一般思维步骤: 识别输入数据是图像. 扫描图像以查看由 ...

  • S7-1200/1500通过FB38000实现V90 EPOS绝对值编码器的校准

    说在前面 在S7-1200/1500 PLC中使用绝对值编码器校正功能块实现V90PN EPOS 功能的绝对值编码器校正.功能块完成零点坐标(p2599) 的写入,并且对参数进行掉电保存.PLC 与驱 ...