使用cv2.getOptimalNewCameraMatrix函数,变为圆形是出现什么错误
cv2.getOptimalNewCameraMatrix
函数用于计算一个新的相机矩阵,以进行图像畸变校正。这个函数的目标是通过考虑畸变的影响,生成一个新的相机矩阵,使得校正后的图像更接近理想的情况。
cv2.getOptimalNewCameraMatrix(cameraMatrix, distCoeffs, imageSize, alpha, newImgSize)
其中参数的含义如下:
cameraMatrix
: 输入的相机矩阵,包含内参信息。distCoeffs
: 输入的畸变系数。imageSize
: 输入图像的尺寸,为(width, height)
的元组。alpha
: 控制缩放比例的参数,通常设置为 1。newImgSize
: 新图像的尺寸,为(width, height)
的元组。
函数返回两个值:
- 新的相机矩阵 (
newCameraMatrix
)。 - 感兴趣区域 (
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. 得到的新的相机内参)。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· winform 绘制太阳,地球,月球 运作规律
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 上周热点回顾(3.3-3.9)