首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >树莓皮:标定相机和图像不失真

树莓皮:标定相机和图像不失真
EN

Stack Overflow用户
提问于 2016-04-08 09:16:56
回答 1查看 5.9K关注 0票数 1

我想从图像中去除鱼眼效应,所以我需要相机矩阵和失真系数。这就是我创建cal.py文件的原因。

当我运行该文件,它给我相机矩阵和失真效率,我把它放在undist.py文件,以消除图像失真。现在每次我得到相同的均方根,相机矩阵,失真系数。

但是当我把这个参数放到undist.py文件中时,这就给了我空白的图像。如何解决这个问题?请帮助me...Thanks在先进。我有捕获8幅图像和一个棋盘模式的样本图像。

EN

回答 1

Stack Overflow用户

发布于 2016-04-15 09:14:30

我将做一个回答,总结所有解决的问题,在评论(这样,这样,未来的读者不必阅读全部)。

  1. 遵循这里的教程,更好地理解您应该做什么以及使用哪些功能。
  2. 检查您的相机矩阵是否具有正确的格式: f_x s c_x 0 f_y c_y 0 0 1 S是一个斜值,我认为在opencv中它总是给出0。
  3. 确保在每一步中图像加载都是正确的,并且它们所做的一切都是预期的(使用imshow函数进行调试)
  4. 这部分代码 新摄像机,roi =cv2. cv2.getOptimalNewCameraMatrix(K,d,(w,h),0) newimg =cv2.不失真(img,K,d,无,新摄像机)

是错误的。为什么,从opencv 文档中我们可以看到:

代码语言:javascript
复制
cv2.getOptimalNewCameraMatrix(cameraMatrix, distCoeffs, imageSize, alpha[, newImgSize[, centerPrincipalPoint]]) → retval, validPixROI

该函数根据自由缩放参数计算并返回最优的新摄像机矩阵。通过改变这个参数,您可以只检索合理的像素alpha=0,如果角点alpha=1中有有价值的信息,可以保留所有原始图像像素,或者在中间获取一些信息。当alpha>0时,非失真结果可能有一些黑色像素对应于被捕获的畸变图像之外的“虚拟”像素。应该将原始摄像机矩阵、失真系数、计算出的新摄像机矩阵和newImageSize传递给initUndistortRectifyMap(),以生成用于remap()的映射。

这意味着新的相机矩阵也给你一个新的有效大小!!更具体而言:

计算出的新摄像机矩阵和newImageSize应该传递给initUndistortRectifyMap()

但是非扭曲函数会自动实现initUndistortRectifyMap .它没有从这个函数中传递newImageSize的方法。基本上你有两个选择。

  1. 使用你的newcamera矩阵,但是不要做undistort,你应该手动做所有的事情.这意味着您必须使用新的尺寸和新的相机矩阵来执行initUndistortRectifyMapremap
  2. 使用在calibrateCamera函数中获得的原始摄像机矩阵。这样它就不会有这个缩放效果,但你可能有一些额外的黑色像素代表的区域,你可能看不到由于纠正。

如果没有,它总是会给你这个缩放效果,因为它不会显示不失真区域的无效像素(黑色像素)。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36495867

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档