我做了立体声校准,得到了validPixROI1和2(绿色边框)。现在我想使用StereoSGBM但是来自校准的rois(来自stereoRectify)的大小不同。有谁知道如何解决这个问题?
实际上我做了一些这样的事情:
Rect roiLeft(...);
Rect roiRight(...);
Mat cLeft(rLeft, roiLeft);
//Mat cRight(rRight, roiRight); // not same size...
Mat cRight(cRight, roiLeft);
stereoBM(cLeft,cRight, dst);
如果我用那个roi裁剪我的图像,那么图片的中间点是否相同?
Here它有效。
答案 0 :(得分:2)
为什么不在(未剪切的)校准图像上运行stereoBM,然后您可以使用这些ROI来屏蔽结果的无效位...
stereoBM(rLeft,rRight, disp);
//get intersection of both rois or use target image roi, if you know the target image
cv::Rect visibleRoi = roiLeft & roiRight;
cv::Mat cDisp(disp,visibleRoi);
现在您对不同尺寸的输入或不同的中心等没有任何问题。
干杯
答案 1 :(得分:1)
根据wiki
光轴与像面交叉处的点R.这一点被称为主要点或图像中心。
所以我不认为中心会是一样的。 请参阅this site。在其中一个例子中,对于一个640x480像素的摄像机,主要点是302.71656,242.33386,它表明主点和图像中心不相同。
答案 2 :(得分:1)
在未经过整理的图像上运行块匹配器,然后使用。
cv::getValidDisparityROI(roi1, roi2, minDisparity, numberOfDisparities, SADWindowSize);
该调用返回一个cv :: Rect,它将成为左图像和视差图中所有有效像素的边界框。有效像素只是两个相机都可以看到的像素。 (对封闭边缘的警告)。
一旦有了视差图,右图就变得无用了。
请注意,从相机内在函数重新映射后,从stereoRectify返回的roi只是有效像素。