python - 校准不失真以减小图像大小
问题描述
我尝试校准我的相机,我已经生成了校准矩阵和不失真参数
array([[449.23763332, 0. , 288.9949981 ],
[ 0. , 509.88847329, 195.85872177],
[ 0. , 0. , 1. ]])
array([-0.38496184, 0.21366652, -0.00107046, 0.00090068, -0.07853835])
以下代码用于不失真
file = 'snapshot_640_480_1.jpg'
img = cv2.imread(file)
h, w = img.shape[:2]
newcameramtx, roi = cv.getOptimalNewCameraMatrix(mtx, dist, (w,h), 1, (w,h))
mapx, mapy = cv.initUndistortRectifyMap(mtx, dist, None, newcameramtx, (w,h), 5)
dst = cv.remap(img, mapx, mapy, cv.INTER_LINEAR)
# crop the image
x, y, w, h = roi
dst1 = dst[y:y+h, x:x+w]
cv.imwrite('calibresult.png', dst1)
display.Image(filename='calibresult.png')
生成的图像尺寸缩小为 (95, 115, 3)
有什么办法可以不扭曲相同大小的图像(调整大小扭曲图像)?
解决方案
cv.getOptimalNewCameraMatrix允许通过提及输入图像大小(w,h)和预期图像大小(w1,h1),通过更改预期图像大小来更改生成的不失真图像大小
通过改变预期的图像大小,我们将获得参考答案。感谢@Micka 的输入
file = r'snapshot_640_480_1.jpg'
img = cv2.imread(file)
h, w = img.shape[:2]
# New Image shape to generate
w1,h1 = 5*w,5*h
newcameramtx, roi = cv.getOptimalNewCameraMatrix(mtx, dist, (w,h), 1, (w1,h1))
mapx, mapy = cv.initUndistortRectifyMap(mtx, dist, None, newcameramtx, (w1,h1), 5)
dst = cv.remap(img, mapx, mapy, cv.INTER_LINEAR)
推荐阅读
- php - 用while循环左连接PHP
- javascript - Redux Reducer => 无法将 undefined 或 null 转换为对象
- javascript - 如何使用 vue 和 vuetify 在选择中显示对象中的元素列表
- r - data.table::melt 中的变量值与模式
- swift - GitHub Actions 上的 SwiftLint 安装步骤失败
- authentication - 这是资源所有者流程的有效用例吗?
- linux - bash脚本中的“权限被拒绝”ls错误
- php - 无法在 Laravel 8 中上传文件
- javascript - 曾经在函数外调用然后在另一个函数内部调用的同一函数之间的冲突
- java - 是否可以在受保护的子类方法中单独打印多个变量?