如何在opencv中访问disparity值

sha*_*han 2 opencv computer-vision stereo-3d

哪个选项是正确的

disparity.at<short>(X,Y)
disparity.at<uchar>(X,Y)
Run Code Online (Sandbox Code Playgroud)

我们是否必须将差异除以16.0以获得正确的差异.有些人在他们的博客中使用1.有些人使用过2.使用函数disparity.type()的类型很短.通过使用1访问我得到的差异值非常高.

Mic*_*cka 6

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

差异 - 输出视差图.它与输入图像的大小相同.当disptype == CV_16S时,映射是一个16位带符号的单通道图像,包含由16缩放的视差值.要从这种定点表示中获得真实的视差值,您需要将每个disp元素除以16.如果disptype == CV_32F,则视差图将已经包含输出上的实际视差值.

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

short pixVal = disparity.at<short>(Y,X);
Run Code Online (Sandbox Code Playgroud)

而差异值是

float disparity = pixVal / 16.0f;
Run Code Online (Sandbox Code Playgroud)

如果您disptype = CV_32F在计算过程中选择了,则可以直接访问差异:

float disparity = disparity.at<float>(Y,X);
Run Code Online (Sandbox Code Playgroud)

访问差异矩阵.at<uchar>绝对应该是错误的!

请注意,不同的OpenCV版本可能存在差异!