首页 > 解决方案 > 校准不失真以减小图像大小

问题描述

我尝试校准我的相机,我已经生成了校准矩阵和不失真参数

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)

有什么办法可以不扭曲相同大小的图像(调整大小扭曲图像)?

不失真的图像

标签: pythonimageopencvimage-processing

解决方案


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)

推荐阅读