我的视差图的结果很好。据我所知,近距离物品应该很轻,远处的物品应该是暗的。与我相反。
这是我的代码:
CvStereoBMState *BMState = cvCreateStereoBMState();
assert(BMState != 0);
BMState->preFilterSize=31/*41*/;
BMState->preFilterCap=41/*31*/;
BMState->SADWindowSize=31/*41*/;
BMState->minDisparity=-0/*-64*/;
BMState->numberOfDisparities=112/*128*/;
try
{
while(true)
{
if(true)
{
if( frameL && frameR )
{
CvMat part;
cvRemap( gFrameL, img1r, mx1, my1 );
cvRemap( gFrameR, img2r, mx2, my2 );
if( true/*!isVerticalStereo || useUncalibrated != 0 */)
{
cvFindStereoCorrespondenceBM( img1r, img2r, disp,BMState);
cvNormalize( disp, vdisp, 0, 256, CV_MINMAX );
cvNamedWindow( "disparity" );
cvShowImage( "disparity", vdisp );
}
}
}
frameL = cvQueryFrame(capLeft);
frameR= cvQueryFrame(capRight);
cvCvtColor(frameL,gFrameL,CV_BGR2GRAY);
cvCvtColor(frameR,gFrameR,CV_BGR2GRAY);
}
如何解决此问题?
答案 0 :(得分:1)
视差是一个立体图像中的一个点与另一个立体图像中的点之间的(水平)像素单位的偏移,其中两个点都是相同3D世界点的图像。如果您的图像被切换,则视差的方向也会被翻转。尝试切换输入图像。
如果切换了左右图像,则差异可能为负
在cvNormalize()
之后,您将获得适当的正值,其中较小的值表示近对象。