在opencv中,视差贴图颜色是向后的

在opencv中,视差贴图颜色是向后的,opencv,stereo-3d,disparity-mapping,Opencv,Stereo 3d,Disparity Mapping,我的问题是我的视差图中的颜色是向后的。在远处,物体比靠近相机的物体轻 我尝试了很多方法(例如convertTo、convertScaleAbs和其中的各种值组合等),但似乎无法使视差图中的颜色反转(即正常-距离较近的颜色比距离较远的颜色亮) 我需要一些帮助来做那件事 另外,出于好奇,我如何才能改变视差图的颜色空间,使之像我在网上看到的MATLAB中的彩色空间 这是我的代码,也在pastebin上 #包括 #包括 #包括 #包括 #包括 #包括 使用名称空间cv; 使用名称空间std; 无效显示(

我的问题是我的视差图中的颜色是向后的。在远处,物体比靠近相机的物体轻

我尝试了很多方法(例如convertTo、convertScaleAbs和其中的各种值组合等),但似乎无法使视差图中的颜色反转(即正常-距离较近的颜色比距离较远的颜色亮)

我需要一些帮助来做那件事

另外,出于好奇,我如何才能改变视差图的颜色空间,使之像我在网上看到的MATLAB中的彩色空间

这是我的代码,也在pastebin上

#包括
#包括
#包括
#包括
#包括
#包括
使用名称空间cv;
使用名称空间std;
无效显示(常量字符*窗口名,Mat图像)
{
namedWindow(窗口名、CV\u窗口大小自动调整);
imshow(窗口名、图像);
}
int main()
{ 
Mat图像1、图像2;
Mat camma1=(Mat_u3,3)numberofdifferences=128;
bm.state->textureThreshold=50;
bm.state->uniquenessRatio=15;
bm.state->windowsize=100;
bm.状态->范围=16;
//将BM状态变量设置为END
视频捕获cap3=视频捕获(0);
视频捕获cap4=视频捕获(1);
//cap3.套件(CV、CAP、PROP、框架、宽度,320);
//cap3.套件(CV、CAP、PROP、框架、高度,240);
//cap4.套件(CV、CAP、PROP、框架、宽度,320);
//cap4.套件(CV\U CAP\U PROP\U FRAME\U HEIGHT,240);
cap3>>图像1;
cap4>>图像2;
Size imageSize=image1.Size();
matgray_图像1;
matgray_图像2;
垫架1R;
//frame1r.create(image1.size(),CV_8U);
垫架2R;
//frame2r.create(image2.size(),CV_8U);
垫架1RF;
垫架2RF;
//Mat disp(image1.size(),CV_16S);
//Mat vdisp(图像1.size(),CV_8U);
Mat disp,vdisp;
//Mat image3d(image1.size(),CV_32FC3);
matimage3d;
Mat-u对;
已纠正的配对创建(imageSize.height,(imageSize.width)*2,CV_8UC3);
//实际执行映射--基于映射定义
而(1)
{
bm.state->preFilterSize=31;
bm.state->preFilterCap=63;
bm.state->sadWindowsSize=21;
bm.state->minDisparity=-128;
//bm.state->disp12MaxDiff=2;
bm.state->numberOfDistances=64;
bm.state->textureThreshold=20;
bm.state->uniquenessRatio=10;
bm.state->windowsize=100;
bm.state->scaperange=32;
CVT颜色(图像1、灰色图像1、CV\U BGR2GRAY);
CVT颜色(图像2,灰色图像2,CV\U BGR2GRAY);
重新映射(灰度图像1、帧1R、rx1、ry1、CV\u内部线性);
重新映射(灰度图像2、帧2R、rx2、ry2、CV\u内部线性);
bm(帧1R、帧2R、显示);
标准化(disp、vdisp、0、255、标准最小最大值、CV 8U);
//可转换标度(vdisp,vdisp,1,0);
显示转换器(vdisp,CV_8U,255/(64*16.);
显示(“差异”,vdisp);
//重新投影到3D(显示、图像3D、Q、真);
//显示(“深度图”,image3d);
//为校正窗口并排显示图像
//将frame1r复制到左侧
CVT颜色(frame1r、frame1rf、CV_GRAY2BGR);
frame1rf.copyTo(整流的u对(Rect(0,0,imageSize.width,imageSize.height));
//将frame2r复制到右侧
CVT颜色(frame2r、frame2rf、CV_GRAY2BGR);
frame2rf.copyTo(整流的u对(Rect(imageSize.width,0,imageSize.width,imageSize.height));
对于(int i=0;i>image1;
cap4>>图像2;
如果(等待键(15)=27)
打破
}
返回0;
}

我没有使用立体声对,但使用Kinect可以得到相同的结果-远=亮,近=暗 为了改变这一点,我使用了以下方法:

  double min, max;
  minMaxLoc(depthImage, &min, &max);

  depthImage.convertTo(rImage, CV_8U, -255.0/max, 255);

我也面临同样的问题,然后我尝试交换左右图像,结果成功了! 现在我得到了正确的图像

  double min, max;
  minMaxLoc(depthImage, &min, &max);

  depthImage.convertTo(rImage, CV_8U, -255.0/max, 255);