資源簡介
這是基于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
- 上一篇:中間代碼生成四元式設計
- 下一篇:高斯擴散模型
評論
共有 條評論