各位好,最近在学习双目立体视觉的相关知识,有没有大神能讲解一下利用双目相机的原始图、生成的视差图和相机内参生成点云的方法和 demo code,还有我在利用BM算法生成的深度图用照片查看器无法打开,提示无效的位图文件或不支持文件的格式,代码如下,不知道什么原因?

#include

#include

#include

#include

#include

#include "time.h"

using namespace std;

using namespace cv;

int main()

{

IplImage* img_r, *img_l;//定义两个图像指针 img_l = cvLoadImage("left_4.png",0);

img_r = cvLoadImage("right_4.png",0);

CvSize size = cvGetSize(img_l);

CvMat* disparity_left = cvCreateMat(size.height,size.width,CV_16S);

CvMat* disparity_right = cvCreateMat(size.height,size.width,CV_16S);

CvStereoBMState *BMState = cvCreateStereoBMState();

assert(BMState != 0);

BMState->preFilterSize=41;

BMState->preFilterCap=31;

BMState->SADWindowSize=15;

BMState->minDisparity=0;//最小视差,默认值为 0, 可以是负值,int 型 BMState->numberOfDisparities=32;

BMState->textureThreshold=10;

BMState->uniquenessRatio=15;//该参数不能为负值,一般5-15左右的值比较合适15 BMState->speckleWindowSize =100;

BMState->speckleRange = 32;

cvFindStereoCorrespondenceBM(img_l,img_r,disparity_left,BMState);

cvReleaseStereoBMState(&BMState);

CvMat* disparity_left_visual = cvCreateMat(size.height,size.width,CV_8UC1);

cvNormalize(disparity_left,disparity_left_visual,0,256,CV_MINMAX);

cvSave("disparity.png",disparity_left_visual);

cvShowImage("disparity",disparity_left_visual);

cvWaitKey(0);

cvDestroyWindow("disparity");

return 0;

}

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐