我想从图像中去除鱼眼效应,所以我需要相机矩阵和失真系数。这就是我创建cal.py文件的原因。
当我运行该文件,它给我相机矩阵和失真效率,我把它放在undist.py文件,以消除图像失真。现在每次我得到相同的均方根,相机矩阵,失真系数。
但是当我把这个参数放到undist.py文件中时,这就给了我空白的图像。如何解决这个问题?请帮助me...Thanks在先进。我有捕获8幅图像和一个棋盘模式的样本图像。
发布于 2016-04-15 09:14:30
我将做一个回答,总结所有解决的问题,在评论(这样,这样,未来的读者不必阅读全部)。
imshow函数进行调试)是错误的。为什么,从opencv 文档中我们可以看到:
cv2.getOptimalNewCameraMatrix(cameraMatrix, distCoeffs, imageSize, alpha[, newImgSize[, centerPrincipalPoint]]) → retval, validPixROI和
该函数根据自由缩放参数计算并返回最优的新摄像机矩阵。通过改变这个参数,您可以只检索合理的像素alpha=0,如果角点alpha=1中有有价值的信息,可以保留所有原始图像像素,或者在中间获取一些信息。当alpha>0时,非失真结果可能有一些黑色像素对应于被捕获的畸变图像之外的“虚拟”像素。应该将原始摄像机矩阵、失真系数、计算出的新摄像机矩阵和newImageSize传递给initUndistortRectifyMap(),以生成用于remap()的映射。
这意味着新的相机矩阵也给你一个新的有效大小!!更具体而言:
计算出的新摄像机矩阵和newImageSize应该传递给initUndistortRectifyMap()
但是非扭曲函数会自动实现initUndistortRectifyMap .它没有从这个函数中传递newImageSize的方法。基本上你有两个选择。
newcamera矩阵,但是不要做undistort,你应该手动做所有的事情.这意味着您必须使用新的尺寸和新的相机矩阵来执行initUndistortRectifyMap和remap。calibrateCamera函数中获得的原始摄像机矩阵。这样它就不会有这个缩放效果,但你可能有一些额外的黑色像素代表的区域,你可能看不到由于纠正。如果没有,它总是会给你这个缩放效果,因为它不会显示不失真区域的无效像素(黑色像素)。
https://stackoverflow.com/questions/36495867
复制相似问题