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. 得到的新的相机内参)。
标签:getOptimalNewCameraMatrix,cv2,畸变,内参,圆形,图像,alpha From: https://www.cnblogs.com/heyrroo/p/17956934