• 大小: 5KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2021-05-20
  • 语言: 其他
  • 标签: opencv  三维重建  

资源简介

这是基于opencv的计算机视觉技术书中的一个程序实例,本人觉得很不错,学习三维立体重建的朋友们可以看看啊

资源截图

代码片段和文件信息


#include “cv.h“
#include “cxcore.h“
#include “highgui.h“
#include 
#include 
#include 
#include 
using namespace std;

#define IMAGE_HEIGHT 288
#define IMAGE_WIDTH 384
#define SIZE 19
//计算基础矩阵
void find_F(double F_data[3][3]double M1_data[3][4]double M2_data[3][4])
{
CvMat F = cvMat(33CV_64FC1F_data);
double M11_data[3][3]={0.00.00.00.00.00.00.00.00.0};
double M21_data[3][3]={0.00.00.00.00.00.00.00.00.0};
double mx_data[3][3]={0.00.00.00.00.00.00.00.00.0};
double m1_data[3]={0.00.00.0};
double m2_data[3]={0.00.00.0};
double m_data[3]={0.00.00.0};
CvMat M11 = cvMat(33CV_64FC1M11_data);
CvMat M21 = cvMat(33CV_64FC1M21_data);
CvMat mx = cvMat(33CV_64FC1mx_data);
CvMat m1 = cvMat(31CV_64FC1m1_data);
CvMat m2 = cvMat(31CV_64FC1m2_data);
CvMat m = cvMat(31CV_64FC1m_data);
int ij;
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
{
M11_data[i][j]=M1_data[i][j];//修改过
M21_data[i][j]=M2_data[i][j];//修改过 
}
m1_data[i]=M1_data[i][3];
m2_data[i]=M2_data[i][3];
}
cvInvert(&M11&M11);
cvMatMul(&M21&M11&M21);
cvMatMul(&M21&m1&m1);
for(i=0;i<3;i++)
{
m1_data[i]=-m1_data[i];
}
cvAdd(&m2&m1&m);
mx_data[0][1]=-m_data[2];
mx_data[0][2]=m_data[1];
mx_data[1][0]=m_data[2];
mx_data[1][2]=-m_data[0];
mx_data[2][0]=-m_data[1];
mx_data[2][1]=m_data[0];
cvMatMul(&mx&M21&F);
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
{
cout< }
cout< }
cout<}
//点匹配 
bool match(double point_src[2]double point_dst[2]IplImage* img_srcIplImage* img_dstdouble F_matrix[3][3]double colors[3]IplImage* img_temp)
{
if(point_src[0]<=SIZE/2||point_src[1]<=SIZE/2||point_src[0]>=IMAGE_WIDTH-SIZE/2||point_src[1]>=IMAGE_HEIGHT-SIZE/2)
{
return false;
}
double point1_data[3]={point_src[0]point_src[1]1.0};
CvMat point1 = cvMat(31CV_64FC1point1_data);
double line_data[3]={0.00.00.0};
CvMat line = cvMat(31CV_64FC1line_data);
CvMat F = cvMat(33CV_64FC1F_matrix);
//计算极线方程
cvMatMul(&F&point1&line);
double cos_value = -1;
double temp_cos = -1;
//建立向量源
double vec_src[SIZE*SIZE*3];
int num=0;
for(int i=-SIZE/2;i<=SIZE/2;i++)
{
for(int j=-SIZE/2;j<=SIZE/2;j++)
{
uchar* temp = &((uchar*)(img_src->imageData+img_src->widthStep*((int)point1_data[1]+i)))[((int)point1_data[0]+j)*3];
vec_src[num++]=temp[0];//blue
vec_src[num++]=temp[1];//green
vec_src[num++]=temp[2];//red
}
}
//遍历极线
double dxdy;
double x = -line_data[2]/line_data[0]y=-line_data[2]/line_data[1];
if(fabs(line_data[0])<0.001)
{
x = SIZE/2+1;
dx = 1.0;
dy = 0.0;
}
else if(fabs(line_data[1])<0.001)
{
y = SIZE/2+1;
dx=0.0;
dy=1.0;
}
else if(fabs(line_data[0]/line_data[1])<1.0)
{
x = SIZE/2+1;
y = (-line_data[2]-x*line_data[0])/line_data[1];
dx = 1.0;
dy = -line_data[0]/line_data[1];
while(x<=S

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件        445  2012-04-08 17:45  三维重建\function_source.h

     文件       6310  2012-04-09 22:15  三维重建\reconstruction_source.cpp

     文件       6552  2012-04-08 17:46  三维重建\function_source.cpp

     目录          0  2012-04-09 23:14  三维重建

----------- ---------  ---------- -----  ----

                13307                    4


评论

共有 条评论