我是opencv的新手并且我试图运行一些代码..我需要从视差图中获取v-disparity地图。我使用两个校正的图像来得到立体匹配,然后得到密集视差图。我得到了视差图,当我试图在v-disparity上对其进行tronsform时,我没有得到任何空窗口。我指的是提出的算法: Raphael Labayrade,Didier Aubert,Jean-Philippe Tarel在他们的文章Stereovision中的实时障碍物检测 非平坦道路几何通过“V-disparity” 表示。 听到是我的代码:
int main(int argc, char *argv[]){
int nbrepetion ;
Mat img = imread(argv[1],0);
Mat image(img.rows,img.cols, CV_8UC1);
if(img.empty()){
printf("Could not load image file\n");
exit(0);
}
int height = img.rows;
int width = img.cols;
int a = width ;
int k = 0 ;
uchar pos =0 ;
for(int i = 0; i < height; i++){
for(int j = 0; j < width; j++)
for (int k = 0; k < a; k++){
if(img.at<uchar>(i,j) == img.at<uchar>(i,k)) {
nbrepetion ++ ;
}
}
if(nbrepetion == 1){
image.at<uchar>(i,k) = img.at<uchar>(i,k);
} else {
pos = img.at<uchar>(i,k);
image.at<uchar>(pos,k) = nbrepetion;
}
nbrepetion = 0 ;
}
namedWindow("disparityimage", CV_WINDOW_AUTOSIZE);
imshow("disparityimage", image );
waitKey(0);
return 0;
}
答案 0 :(得分:1)
对于视差图像: 使用大小矩阵(rows,maxVal),并为视差图像的每一行增加相应的元素1,其中视差值对应于视差图像中的列。
沿着u-disparity图像的行重复此操作。
答案 1 :(得分:0)
让我们将视差图像表示为大小(高度,宽度)的差异。 输出是大小(高度,maxDisp)的视差图像,其中maxDisp是视差图像中的最大值。让我们来表示它是vdisp。 算法(伪代码)如下:
For each i in disp.Rows DO
For each j in disp.Columns
if disp(i, j) > 0 Then
vdisp(i, disp(i,j)++
end
end
end
如果查看v-disparity图像,直线垂直线表示障碍物表面,而直线对角线表示地面平面。您可以使用霍夫变换来识别视差图像中的直线。 在论文“基于V-disparity的障碍物检测方法的FPGA实现”中,它是非常好的解释。