【问题标题】:How can you rectify cropped stereo images in OpenCV?如何在 OpenCV 中纠正裁剪的立体图像?
【发布时间】:2019-05-11 03:10:20
【问题描述】:

我有一对水平对齐的立体相机,它们使用图像的完整尺寸进行了校准。

我正在通过调用 cv2.initUndistortRectifyMap 来获取每个相机的地图,然后调用 cv2.remap 来进行纠正

使用全尺寸图片时,如下所示:

map1, map2 = cv2.initUndistortRectifyMap(camera_matrix_1, dist_coeffs_1, R1, P1, (w, h), cv2.CV_16SC2)
map3, map4 = cv2.initUndistortRectifyMap(camera_matrix_2, dist_coeffs_2, R2, P2, (w, h), cv2.CV_16SC2)
rectified1 = cv2.remap(img1, map1, map2, cv2.INTER_LINEAR)
rectified2 = cv2.remap(img2, map3, map4, cv2.INTER_LINEAR)

cv2.initUndistortRectifyMap 的参数是cv2.stereoCalibratecv2.stereoRectify 的输出

但是,为了提高处理速度,在处理图像时,图像将被裁剪(并可能被装箱),然后才能进行校正。这意味着校正过程不能使用图像的完整尺寸。

需要更改哪些代码才能在完成校正之前对图像进行裁剪(和分箱)?

【问题讨论】:

  • 装箱了吗?那不会影响任何事情。校正不会重新调整像素值。至于裁剪,我认为校正会重新缩放图像,所以你真的必须检查数学来弄清楚如何补偿它。我怀疑这将涉及阅读 Hartley 和 Zisserman 并可能阅读 opencv 源代码。我建议通过填充白色来“取消裁剪”,然后在纠正后再次裁剪

标签: python opencv image-processing computer-vision camera-calibration


【解决方案1】:

如果要对原始img1img2进行裁剪和调整大小(缩放)并在校准后使用,则需要更改camera_matrix_1camera_matrix_2。裁剪改变主点,比例改变焦距。但是rectified1rectified2 的结果(输出)不会改变它的大小:w, h。如果你想要更小的输出图像,你需要改变P1P2

z 0 sx
0 z sy * camera_matrix  ->  camera_matrix'
0 0 1 

z - 比例因子,s - 裁剪图像中心的偏移。 camera_matrixP 的比例和移位可能不同。 不要忘记使用 initUndistortRectifyMap 和新参数重新创建 map1map2...。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-12-31
    • 1970-01-01
    • 2020-09-07
    • 1970-01-01
    • 2017-08-04
    • 2023-03-05
    • 2019-08-02
    • 2013-03-13
    相关资源
    最近更新 更多