资源简介
这是基于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
- 上一篇:中间代码生成四元式设计
- 下一篇:高斯扩散模型
相关资源
- 三维重建(旋转)由已知对应图像点
- 基于OpenCV的数字识别468815
- 使用opencv去掉二值化图像中黑色面积
- opencv环境配置
- win10 64位下编译的opencv4.5.5库,opencv
- NVIDIAOpticalFlowSDK-79c6cee80a2df9a196f20afd6
- 基于图像三维重建软件visualSFM
- opencv_contrib-3.4.0.zip
- opencv2.4.9源码分析——SIFT
- 用两个摄像头实现,双目标定,双目
- opencv_traincascade训练分类器,手势识别
- opencv3.0交叉编译用parallel.cpp
- 基于opencv的图像识别识别图像中的色
- 基于openCV的识别特定颜色区域
- 基于OpenCV的分水岭算法实现
- QT+opencv+OCR 身份证号码,银行卡号识别
- opencv视频特定颜色区域识别
- 把RGB转换为HSV和HSI然后根据黄色和蓝
- opencv视觉测距
- 基于Qt和opencv的身份证号码识别系统
- opencv_ffmpeg249.dll
- SfM稀疏三维点云重建--完整工程文件
- 基于opencv的数人头程序源代码
- 利用OpenCV中的Stitcher类实现全景图像拼
- opencv实现的sift算法源码,包含了图像
- openCV 上的小波变换
- 基于OPENCV的车牌识别系统设计
- 617张国内车牌60-17bmp图片用于OpenCV正样
- hog特征提取,c版本代码
- 基于Qt5.8+OpenCV3.2的Basler多相机触发开
评论
共有 条评论