资源简介
三维重建的VC++代码,需已知两个相机的投影矩阵来计算基本矩阵F
OPENCV+OPENGL
代码片段和文件信息
#include “stdafx.h“
#include“cv.h“
#include“cxcore.h“
#include“highgui.h“
#include“glut.h“
#include“function.h“
#include
#include
using namespace std;
#pragma comment(lib“cxcore“)
#pragma comment(lib“cv“)
#pragma comment(lib“highgui“)
static int mouse_xmouse_y;
static double rotate_x=0rotate_y=0temp_x=0temp_y=0;
vector>points_2d_vec;
vectorcolors;
void init();
void display();
void reshape(int wint h);
void mouse(int buttonint stateint xint y);
void mouse_move(int xint y);
int main(int argcchar**argv)
{
IplImage*img1=0;
IplImage*img2=0;
if((img1=cvLoadImage(“match_image/1_l.bmp“1))=0)
{
cout<<“fail to load file!!!“< return -1;
}
if((img2=cvLoadImage(“match_image/1_r.bmp“1))=0)
{
cout<<“fail to load file!!!“< return -1;
}
int ij;
double M1[3][4]M2[3][4]F[3][3];
for(i=0;i<3;i++)
{
for(j=0;j<4;j++)
{
M1[i]=0.0;
M2[i]=0.0;
if(i<3)
F[i]=0.0;
}
}
cout<<“read M1M2“< read_M(M1.M2);
cout<<“Find F matrix“< find_F(FM1M2);
IplImage*gray1=cvCreateImage(cvGetSize(img1)81);
IplImage*gray2=cvCreateImage(cvGetSize(img1)81);
IplImage*temp1=cvCreateImage(cvGetSize(img1)IPL_DEPTH_SIGN|161);
IplImage*temp2=cvCreateImage(cvGetSize(img1)IPL_DEPTH_SIGN|161);
IplImage*img1_contour=cvCreateImage(cvGetSize(img1)81);
IplImage*img2_contour=cvCreateImage(cvGetSize(img1)81);
CvMemStorage*contour_st1=cvCreateMemStorage(0);
CvSeq*contour2=cvCreateSeq(CV_8Usizeof(CvSeq)sizeof(CvPoint)contour_st2);
cout<<“image process“< cvCvtColor(img1gray1CV_BGR2GRAY);
cvEqualizeHist(gray1gray1);
cvCanny(gray1gray10.110.0);
cvCvtColor(img2gray2CV_BGR2GRAY);
cvEqualizeHist(gray2gray2);
cvCanny(gray2gray20.110.0);
cvFindContour(gray1contour_st1&contour1sizeof(CvContour)CV_RETR_LISTCV_link_RUNS);
cvFindContour(gray2contour_st2&contour2sizeof(CvContour)CV_RETR_LISTCV_link_RUNS);
for(;contour2;contour2=contour2->h_next)
{
cvDrawContours(img2_contourcontour2cvScalar(255.0255.0255.0)cvScalar(255.0255.0255.0)0);
}
cvDilate(gray2gray2NULL2);
double p1[2]p2[2]p[3];
cout<<“strat match“< for(;contour1;contour1=contour1->h_next)
{
double color[3]={0.00.00.0};
cvDrawContours(img1_contourcontour1cvScalar(255.0255.0255.0)cvScalar(255.0255.0255.0)0);
vctorpoints_3d;
for(i=0;itotal;i++)
{
p1[0]=((CvPoint*)cvGetSeqElem(contour1i))->x;
p1[1]=((CvPoint*)cvGetSeqElem(contour1i))->y;
if(! match(p1p2img1img2Fcolorimg2_contour))
continue;
cvCircleAA(img2_contourcvPoint(p2[0]p2[1])1255);
point_reconstruct(M1M2p1p2p);
points_3d.push_back(p[0]);
points_3d.push_back(p[1]);
points_3d.push_back(p[2]);
}
if(points_3d.size()!=0)
{
colors.push_back(color[0]/(points_3d.size()/3));
colors.push_back(color[1]/(points_3d
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 5185 2009-07-29 20:22 3drebuild\3drebuild.cpp
文件 4192 2009-07-29 20:22 3drebuild\3drebuild.dsp
文件 524 2009-07-29 15:23 3drebuild\3drebuild.dsw
文件 33792 2009-07-29 20:22 3drebuild\3drebuild.ncb
文件 48640 2009-07-29 20:22 3drebuild\3drebuild.opt
文件 10377 2009-07-29 20:18 3drebuild\3drebuild.plg
文件 6235472 2009-07-29 20:18 3drebuild\Debug\3drebuild.pch
文件 197632 2009-07-29 20:18 3drebuild\Debug\vc60.idb
文件 110592 2009-07-29 20:18 3drebuild\Debug\vc60.pdb
目录 0 2009-07-29 20:18 3drebuild\Debug
目录 0 2009-07-29 20:22 3drebuild
----------- --------- ---------- ----- ----
6646406 11
- 上一篇:用C++实现的聊天程序
- 下一篇:MFC_跑酷游戏小Demo
相关资源
- VC++ 对话框 滚轮 计算器
- VC++ AES加密算法实现与范例的源代码
- 基于VC++的人脸定位系统
- VC++2008,32位,64位组件运行库
- Matcom和VC混合编程
- VC++2010下使用Tesseract需添加的dll
- VC++坦克大战多人在线大型网络游戏
- MFC中文和英文帮助文档(各一份)
- VC++ MFC编写的2048小游戏工程及源代码
- C++教程 面向对象编程 清华大学出版
- VC++6.0 MFC 基于对话框编写的扫雷源程
- 多功能计算器 vc++ mfc
- MFC vc++ 指针时钟 闹钟,非常好用。
- 酒店管理系统数据库设计
- VC6.0的使用工具AddOpen插件、字体/颜色
- VC++开发实战1200例界面换肤模块
- 基于TCP协议VC++6.0实现的聊天程序
- VC++实现的酒店管理系统软件
- VC++ OpenGL三维地形漫游
- VC++直方图均衡化显示图像及直方图
- vc++ c++ c 软件自动升级程序源代码 在
- 黄维通Visual C++面向对象与可视化程序
- Microsoft vc++6.0代码提示插件
- Visual C++数字图像识别技术典型案例
- VC++实现动态创建对话框非常好的C++源
- VC++开发的斗地主的网络游戏源码
- VC++2010学习版和永久使用注册码
- 使用API函数实现的串口通讯DLL含源码
- 数据结构课程设计 山东大学版 文件
- CSocket端口扫描源代码MFC、VC++耿网出品
评论
共有 条评论