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

密集点匹配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; }


相关文章:
密集点匹配opencv程序
密集点匹配opencv程序_信息与通信_工程科技_专业资料。密集点匹配opencv程序//由于 cvut 版本进行了更新,致使该工程不能在最新 cvut 版本下编译,请使用工程包含的 ...
OpenCV中特征点提取和匹配的通用方法
OpenCV中特征点提取和匹配的通用方法_计算机软件及应用_IT/计算机_专业资料。...密集点匹配opencv程序 4页 免费 基于OPENCV的WLD特征提取... 3页 1下载券 ...
OpenCV成长之路(9)特征点检测与图像匹配
OpenCV成长之路(9)特征点检测与图像匹配_计算机软件及应用_IT/计算机_专业资料。...其他 的角点都删除,窗口大小这里我们用 3*3,程序中通过图像的膨胀运算来达到...
VS2010使用OpenCV的配置过程-已通过多机实验的个人成果综合
在 VS 新建一个 Win32 控 制台应用程序,以下以工程 Opencv 为例,然后选择...点开之前建的工程 Opencv ,会看到 Debug|Win32 和 Release|Win32 两个目录 ...
opencv简单的滚动条程序
密集点匹配opencv程序 4页 免费 opencv人脸检测程序求详... 9页 1下载券 openCV的模板匹配程序 2页 免费 linux下第一个OpencV程序... 2页 免费 opencv建立mfc...
图像匹配算法在OPENCV中的研究与实现
图像匹配算法在OPENCV中的研究与实现_计算机软件及应用_IT/计算机_专业资料。一...二、学习的知识点 1、 sift 算法(surf 算法基本与 sift 算法相同) sift 算法...
最近邻算法在opencv下的实验,现在没太看懂
最近邻算法在opencv下的实验,现在没太看懂_数学_自然科学_专业资料 暂无评价|0人阅读|0次下载|举报文档 最近邻算法在opencv下的实验,现在没太看懂_数学_自然科学...
Opencv 模板匹配
Opencv 模板匹配_计算机软件及应用_IT/计算机_专业资料。OPencv2.0模板匹配说明文档...密集点匹配opencv程序 4页 免费 openCV的模板匹配程序 2页 免费 OpenCV 110页 ...
opencv在VS2010中永久性配置方法及属性表的建立
新建?项目?VC++?win32 控制台应用程序,在下面输入名称 testopencv,点击下一步,选 择空项目 永久配置 opencv 打开视图?属性管理器,点开如下图 一次性配置 ...
VS2010+OpenCV2.4.6永久性配置方法
VS2010+OpenCV2.4.6永久性配置方法_计算机软件及应用_IT/计算机_专业资料。VS...文件->新建->项目->Visual C++->Win32 控制台应用程序(输入名称 test1) ,如图...
更多相关标签:
opencv 密集匹配 点云 | 密集匹配 | 影像密集匹配 | 影像密集匹配 pmvs | sgm 密集匹配 | 密集匹配算法 | 密集匹配 点云 | opencv 轮廓匹配 |