各位好,最近在学习双目立体视觉的相关知识,有没有大神能讲解一下利用双目相机的原始图、生成的视差图和相机内参生成点云的方法和 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;
}
本文发布于:2024-01-28 00:22:53,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/17063725743532.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |