哪个选项正确
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版本可能有所不同!