当前位置:首页 >> 信息与通信 >>

密集点匹配opencv程序


//由于 cvut 版本进行了更新,致使该工程不能在最新 cvut 版本下编译,请使用工程包含的 cvut 库进行 编译 #include "cv.h" #include "highgui.h"

#include "cvut/cvut.h"

#include <iostr

eam> #include <fstream> #include <string> #include <vector>

using namespace std; using namespace cvut;

#pragma comment(lib,"cxcore") #pragma comment(lib,"cv") #pragma comment(lib,"highgui")

//#define REAL_TIME_MATCHING_SHOW

int main(int argc,char** argv) { Image<uchar> temp("image/Luxor02StereoSm2.jpg");

Image<uchar> left(temp.size().width/2,temp.size().height,8,3); Image<uchar> right(temp.size().width/2,temp.size().height,8,3);

//分割图像 int i,j,t,k; for (i=0;i<temp.height;++i) { j=0; for (;j<temp.width/2;j++) { for (t=0;t<temp.channels;++t) { left(i,j,t) = temp(i,j,t); } } j++; for (k=j+1,j=0;k<temp.width;++k,++j) { for (t=0;t<temp.channels;++t) { right(i,j,t) = temp(i,k,t); } } }

left.show("left"); right.show("right",400,0); cvWaitKey(); left.close(); right.close();

/************************************************************************ 特征匹配 *************************************************************************/ cout<<"特征匹配……"; int depth_count = 0; vector<vector<int> > depth(left.width*left.height,vector<int>(3)); vector<int> depth_buf(3); // 匹 配 窗 口 大 小

//////////////////////////////////////////////////////////////////////// int win_size = 9;

Matrix<double> left_wins(left.width-win_size/2-win_size/2,win_size*win_size*3,1); Matrix<double> right_wins(left.width-win_size/2-win_size/2,win_size*win_size*3,1);

//设定最大可能视差/////////////////////////////////////////////////////////// int depth_max = 10; int depth_min = left.height; bool is_match = false;

int l,m,n; for (i=win_size/2;i<left.height-win_size/2;i++) { cout<<i<<" "; /* 建立第 i 行所有的源向量和目的向量 */ for (int k=win_size/2;k<left.width-win_size/2;k++) { int p=0,q=0; for (l=i-win_size/2;l<=i+win_size/2;l++) { for (m=k-win_size/2;m<=k+win_size/2;m++) { for (n=0;n<3;n++) { left_wins(k-win_size/2,p++,0) = left(l,m,n); } } for (m=k-win_size/2;m<=k+win_size/2;m++) { for (n=0;n<3;n++) { right_wins(k-win_size/2,q++,0) = right(l,m,n); }

} } } //遍历极线进行匹配 for (j=win_size/2;j<left.width-win_size/2;j++) { depth_buf[0] = i; depth_buf[1] = j; /* 初始最大误差 */ double cos_val = 0.9; int index=0; is_match = false; for (int k=j;k<min(left.width-win_size/2,j+depth_max);k++) { /* 计算向量误差 */ double cos_temp = 0,val1 = 0,val2 = 0,val3 = 0; for (int u=0;u<left_wins.cols;++u) { val1 left_wins(j-win_size/2,u,0)*right_wins(k-win_size/2,u,0); val2 left_wins(j-win_size/2,u,0)*left_wins(k-win_size/2,u,0); val3 right_wins(k-win_size/2,u,0)*right_wins(k-win_size/2,u,0); } cos_temp = val1/sqrt(val2)/sqrt(val3); /* 判断是否匹配 */ if (cos_temp > cos_val){ depth_buf[2] = k-depth_buf[1]; cos_val = cos_temp; index = k; is_match = true; } } if (is_match) { depth_min = depth_buf[2]<depth_min?depth_buf[2]:depth_min; depth[depth_count] = depth_buf; depth_count++; is_match = false; /* 实时匹配显示 */ #ifdef REAL_TIME_MATCHING_SHOW cvCircle(left.cvimage,cvPoint(j,i),1,CV_RGB(255,255,255)); cvCircle(right.cvimage,cvPoint(index,i),1,CV_RGB(255,255,255)); left.show("left",0,0); right.show("right",400,0); cvWaitKey(); += += +=

left.close(); right.close(); #endif } } } cout<<"完成"<<endl; /************************************************************************ 显示深度图像 *************************************************************************/ cout<<"最小视差:"<<depth_min<<endl <<"最大视差:"<<depth_max<<endl;

Image<uchar> depth_image(left.size(),8,1); for (i=0;i<depth.size();i++) { depth_image(depth[i][0],depth[i][1]) (uchar)(255*(double)(depth[i][2]-depth_min)/(double)(depth_max-depth_min)); } =

depth_image.show("depth"); cvWaitKey(); depth_image.close();

return 0; }


相关文章:
基于ransac算法的sift特征匹配研究(OpenCV+VS2010)___...
基于ransac算法的sift特征匹配研究(OpenCV+VS2010)___朱万革(最终版)_计算机软件及应用_IT/计算机_专业资料。sift特征点提取以及匹配 ransac算法的运用图像拼接测距标...
opencv简单的滚动条程序
密集点匹配opencv程序 4页 免费 opencv人脸检测程序求详... 9页 1下载券 openCV的模板匹配程序 2页 免费 linux下第一个OpencV程序... 2页 免费 opencv建立mfc...
VS2010使用OpenCV的配置过程-已通过多机实验的个人成果...
在 VS 新建一个 Win32 控 制台应用程序,以下以工程 Opencv 为例,然后选择...点开之前建的工程 Opencv ,会看到 Debug|Win32 和 Release|Win32 两个目录 ...
尺度不变的模板匹配(opencv源码)
尺度不变的模板匹配(opencv源码)_计算机软件及应用_IT/计算机_专业资料。尺度不...密集点匹配opencv程序 4页 免费 OpenCV人脸检测及附加源... 23页 1下载券 ...
Opencv 模板匹配
Opencv 模板匹配_计算机软件及应用_IT/计算机_专业资料。OPencv2.0模板匹配说明文档...密集点匹配opencv程序 4页 免费 openCV的模板匹配程序 2页 免费 OpenCV 110页 ...
64位Win7下配置OpenCV的完整过程
64位Win7下配置OpenCV的完整过程_电脑基础知识_IT/...二、配置环境变量 右击“我的电脑”选“属性”,点...在之前新建的控制台程序中添加如下测试代码,注意...
vs2012配置opencv2.4.9详解
OpenCV:2.4.9(点此下载 http://opencv.org/) 选择 这里的 opencv forwindows...tab249.dll (可根据实际需要删减) 4.Opencv2.3.9 配置完成,编译运行程序。 ...
Visual Studio2012环境下配置OpenCV_v2.4.10的步骤_图文
测试程序完成了上述步骤后,Visual Studio2012 环境下配置 OpenCV 的步骤已经全部完成,下面 给出一个测试程序,验证环境配置的正确性。 在程序的源文件目录下的 ...
Opencv 完美配置攻略_图文
Opencv 完美配置攻略_计算机软件及应用_IT/计算机_...输入名称 test 点添加 粘贴下面的代码,保存: 把...(是里面那个 test 文件夹) 按 F5 调试程序,如果...
OpenCV教程函数总结
OpenCV教程函数总结_计算机软件及应用_IT/计算机_专业..._test.cpp 利用 brief 描述算子匹配二维图像特征点...No8. inpaint.cpp 数字图像修复程序,基于纹理合成。...
更多相关标签:
opencv 密集匹配 点云 | opencv 密集匹配 | 密集匹配 | 影像密集匹配 | 什么是密集匹配 | 密集立体匹配 | 倾斜影像密集匹配 | 密集匹配算法 |