哪个选项正确

disparity.at<short>(X,Y)
disparity.at<uchar>(X,Y)

我们是否必须将视差除以16.0才能获得正确的视差。
有些人在博客中使用1。有些人使用2。使用函数disparity.type()可以简化类型。
我通过使用1获得的视差值非常高。

最佳答案

如果您使用OpenCV 2.4.x,则必须查看http://docs.opencv.org/modules/calib3d/doc/camera_calibration_and_3d_reconstruction.html#stereobm-operator,它告诉您:



因此,如果您在计算过程中选择了disptype = CV_16S,则可以通过以下方式访问像素位置(X,Y)处的像素:

short pixVal = disparity.at<short>(Y,X);

而视差值为
float disparity = pixVal / 16.0f;

如果您在计算过程中选择了disptype = CV_32F,则可以直接访问差异:
float disparity = disparity.at<float>(Y,X);

.at<uchar>访问视差矩阵肯定是错误的!

请注意,不同的OpenCV版本可能有所不同!

10-05 21:38