我有一個使用OpenCV和兩個攝像頭的立體聲設置。我使用BM對應算法計算了基本矩陣和基本矩陣,內省extrinces等。現在我想在另一個圖像的左側圖像中找到一個像素的匹配點。爲此,我定義了下面的函數,這是不完整的,因爲我的主要目的是計算真實世界的距離。OpenCV立體匹配基本矩陣奇怪值
void StereoVision::findEpipolarLineForXY(int x, int y ,int lr)
{
if(calibrationDone)
{
CvPoint3D32f p1={x,y,1};
qDebug("%d,_,_,%d",p1.x,p1.y);
CvMat pt1=cvMat(3,1,CV_64FC1,&p1);
qDebug("-");
CvMat e=_E;
qDebug("pt1:");
PrintMat(&pt1);
qDebug("e:");
PrintMat(&e);
//CvMat * corLine;
//CvMat* pt2=e*pt1;
CvMat *pt2 = cvCreateMat(e.rows, pt1.cols, CV_64FC1);
qDebug("pt2:");
PrintMat(pt2);
qDebug("--%d--->%d",pt2->rows,pt2->cols);
cvMatMul(&e, &pt1, pt2);
qDebug("--%d--->%d",pt2->cols,pt2->data);
//const CvMat* f=&_F;
qDebug("---");
//cvComputeCorrespondEpilines(&mat,lr,f,corLine);
qDebug("----");
//qDebug("%d,,,%d",corLine->height,corLine->rows);
}
}
void StereoVision::PrintMat(CvMat *A)
{
int i, j;
for (i = 0; i < A->rows; i++)
{
QDebug dbg(QtDebugMsg);
dbg<<"\n";
switch (CV_MAT_DEPTH(A->type))
{
case CV_32F:
case CV_64F:
for (j = 0; j < A->cols; j++)
dbg <<"%8.3f "<< ((float)cvGetReal2D(A, i, j));
break;
case CV_8U:
case CV_16U:
for(j = 0; j < A->cols; j++)
dbg <<"%6d"<<((int)cvGetReal2D(A, i, j));
break;
default:
break;
}
dbg.~QDebug();
}
qDebug("");
}
我想知道爲什麼基本矩陣是不好的?所有輸出低於:
350,,,317
0,,,1081466880
-
PT1:
%8.3f 350
%8.3f 317
%8.3f 1
E:
%8.3f 0%8.3f INF%8.3f 0
%8.3f 0%8.3f 0%0 8.3f
%8.3 f 0的%8.3f 0%0 8.3f
PT2:
%8.3f -INF
%8.3f -INF
%8.3f -INF
--3 ---> 1
--1 ---> 44201616
另外我想知道如果我在正確的道路上找到真實世界座標中像素的3D距離嗎?