双目标定后如何正确重映射立体图像并调整ROI
立体相机标定后调整图像尺寸与ROI处理的正确方式
你的整体思路方向是对的,但有个关键细节需要调整——左右相机的ROI是各自独立的,不能共用同一组裁剪参数,我来帮你理清楚正确的处理步骤:
首先,先明确你标定阶段得到的ROI的意义:
- 你通过
cv2.stereoRectify得到了初始的roi1和roi2,之后又用cv2.getOptimalNewCameraMatrix针对你调整后的目标尺寸(320,240)重新计算了一组roi1和roi2——这组重新计算的ROI才是你后续裁剪时应该用的,因为它适配了你缩小后的图像尺寸。
然后,正确的双图像裁剪代码应该是这样:
# 处理左相机图像 dst1 = cv2.remap(frame, mapx1, mapy1, cv2.INTER_LINEAR) # 取出左相机对应的ROI参数 x1, y1, w1, h1 = roi1 # 裁剪左图 dst1 = dst1[y1:y1+h1, x1:x1+w1] # 处理右相机图像 dst2 = cv2.remap(frame2, mapx2, mapy2, cv2.INTER_LINEAR) # 取出右相机对应的ROI参数 x2, y2, w2, h2 = roi2 # 裁剪右图 dst2 = dst2[y2:y2+h2, x2:x2+w2]
为什么要分开用各自的ROI?因为左右相机的畸变程度、内参都有差异,哪怕你把图像缩放到了同一尺寸,校正后没有黑边的有效区域(也就是ROI)的位置和大小大概率是不一样的。如果强行用同一组x,y,w,h裁剪,要么会裁掉其中一张图的有效内容,要么会保留另一张图的黑边,影响后续的立体匹配效果。
另外补充一点:你在cv2.stereoRectify里已经加了cv2.CALIB_ZERO_DISPARITY这个参数,它会让左右相机的主光轴保持平行,此时左右ROI的高度应该是一致的,宽度可能会有细微差别,但各自用对应的ROI裁剪就能保证两张图的有效区域对齐,方便后续的立体视觉处理。
内容的提问来源于stack exchange,提问作者gaetano ma
相关产品推荐
相关产品推荐

