使用cv2.getOptimalNewCameraMatrix函数,变为圆形是出现什么错误

cv2.getOptimalNewCameraMatrix 函数用于计算一个新的相机矩阵,以进行图像畸变校正。这个函数的目标是通过考虑畸变的影响,生成一个新的相机矩阵,使得校正后的图像更接近理想的情况。

cv2.getOptimalNewCameraMatrix(cameraMatrix, distCoeffs, imageSize, alpha, newImgSize)

其中参数的含义如下:

  • cameraMatrix: 输入的相机矩阵,包含内参信息。
  • distCoeffs: 输入的畸变系数。
  • imageSize: 输入图像的尺寸,为 (width, height) 的元组。
  • alpha: 控制缩放比例的参数,通常设置为 1。
  • newImgSize: 新图像的尺寸,为 (width, height) 的元组。

函数返回两个值:

  1. 新的相机矩阵 (newCameraMatrix)。
  2. 感兴趣区域 (validPixROI),是一个元组 (x, y, width, height),表示不受畸变影响的图像区域。

但是在使用以下函数时,标定结果为圆形。

new_camera_matrix, roi = cv2.getOptimalNewCameraMatrix(mtx, dist, (u, v ), 0.5, (u, v ))
undistorted_image = cv2.undistort(img, mtx, dist, None, new_camera_matrix)

标定结果为

解决方法为

将以上代码中的alpha设置为0,即可。

总结:

1.alpha=0,视场会放大,alpha=1,视场不变
2.进行roi的crop会裁掉一些像素

alpha(因为畸变矫正后有黑边,这个值指示的是保留多少畸变后的像素,选择0,那么就意味着保留最少的黑边,使用1的话,保留全部像素,那么所有黑边都包含进去了)

该函数的返回值返回值:

1. 新的内参
2. 返回的ROI,理解成:因为有黑边,这里可能要剪切黑边,这个ROI就是怎么剪切才能没有黑边。

使用上述API返回的新的内参,矫正图像,使用cv2.undistort进行(1. 原图 numpy.array类型 2. 畸变图像对应的内参 3. 矫正参数 4. None 5. 得到的新的相机内参)。

 

 

posted @   heyrro  阅读(1072)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· winform 绘制太阳,地球,月球 运作规律
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示