C++ OpenCV立体匹配反转输出

C++ OpenCV立体匹配反转输出,c++,opencv,image-processing,stereo-3d,stereoscopy,C++,Opencv,Image Processing,Stereo 3d,Stereoscopy,我正在尝试用人工深度图像进行立体匹配。 匹配结果似乎很好(没有遮挡),但出现了反转(黑色=近,白色=远) 这些是我正在使用的图像和 我得到的结果是: 我做错什么了吗? 谢谢我想你把左右两边都弄糊涂了。4.png应该是right/img2和1.png left/img1。(对象位于右侧的图片与从左摄像头看到的图片相同,反之亦然。)我使用DainiusŠaltenis的建议,通过在opencv中使用按位not操作符反转图像,并移除所有纯白色像素,从而解决了这一问题 //Bitwise_not to

我正在尝试用人工深度图像进行立体匹配。 匹配结果似乎很好(没有遮挡),但出现了反转(黑色=近,白色=远)

这些是我正在使用的图像和

我得到的结果是:

我做错什么了吗?
谢谢

我想你把左右两边都弄糊涂了。4.png应该是right/img2和1.png left/img1。(对象位于右侧的图片与从左摄像头看到的图片相同,反之亦然。)

我使用DainiusŠaltenis的建议,通过在opencv中使用按位not操作符反转图像,并移除所有纯白色像素,从而解决了这一问题

//Bitwise_not to invert the images
bitwise_not(disp8, disp8);

//Loop through the images find all white pixels and replace with black
for (int i = 0; i < disp8.rows; i++)
    for (int j = 0; j < disp8.cols; j++)
        if (disp8.at<uchar>(i, j) > 254)
            disp8.at<uchar>(i, j) = 0;
//按位\u不反转图像
按位_not(disp8,disp8);
//在图像中循环查找所有白色像素并替换为黑色
对于(int i=0;i254)
disp8.at(i,j)=0;

尝试使用该函数,它会反转图像上的所有字节(从白到黑、从黑到白等等)。我从来没有使用过立体图像的经验,不确定这是否可能,但是读一下,它可能会对你有所帮助。我使用这个函数来反转Mat图像。深度值不反转。黑色值具有低距离和低像素值,而像素具有高深度和高像素值!也许你只是把术语弄混了?是的,深度的计算是正确的,但它的表示方式是错误的。8位视差贴图通常使用255表示距离相机较近的白色像素,0表示距离相机最远的黑色像素。我可能错了,但你得到的是差异,而不是深度,对吗?你需要计算每个像素的深度,以获得你想要的精确信息——看这个:如果我将图像翻转到另一个方向,即使调整了值,我也会得到非常糟糕的结果。奇怪的是,这似乎对我有效。不管怎样,我很高兴你找到了解决办法。
//Bitwise_not to invert the images
bitwise_not(disp8, disp8);

//Loop through the images find all white pixels and replace with black
for (int i = 0; i < disp8.rows; i++)
    for (int j = 0; j < disp8.cols; j++)
        if (disp8.at<uchar>(i, j) > 254)
            disp8.at<uchar>(i, j) = 0;