学习Opencv第十二章立体匹配源代码

本文详细介绍了学习OpenCV中立体匹配的源代码过程,通过分析棋盘图像链接提供的数据,探讨了stereoData/left01.jpg等图片在立体匹配中的应用。
摘要由CSDN通过智能技术生成

立体匹配源代码:

#include "cv.h"
#include "cxmisc.h"
#include "highgui.h"
//#include "cvaux.h"
#include <vector>
#include <string>
#include <algorithm>
#include <stdio.h>
#include <ctype.h>

using namespace std;

static void StereoCalib(const char* imageList, int nx, int ny, int useUncalibrated)
{
	int displayCorners = 0;
	int showUndistorted = 1;
	bool isVerticalStereo = false;//OpenCV can handle left-right
					//or up-down camera arrangements
	const int maxScale = 1;
	const float squareSize = 1.f; //棋盘每个方格的大小,以实际为准,这里为1
	FILE* f = fopen(imageList, "rt"); //读取棋盘的路径文件
	int i, j, lr, nframes, n = nx*ny, N = 0;
	vector<string> imageNames[2];//保存左右图像的路径,imageName[0]保存左图像的路径,imageName[1]保存右图像的路径
	vector<CvPoint3D32f> objectPoints; //保存nframes幅棋盘图像的角点坐标
	vector<CvPoint2D32f> points[2]; //保存左右图像的总角点坐标,points[0]保存左图像总角点坐标,points[1]保存右图像的
	vector<int> npoints;
	vector<uchar> active[2]; //保存左右每幅图像角点检测的返回结果
	vector<CvPoint2D32f> temp(n); //保存每个棋盘角点坐标
	CvSize imageSize = { 0, 0 };

	double M1[3][3], M2[3][3], D1[5], D2[5];
	double R[3][3], T[3], E[3][3], F[3][3];
	CvMat _M1 = cvMat(3, 3, CV_64F, M1);
	CvMat _M2 = cvMat(3, 3, CV_64F, M2);
	CvMat _D1 = cvMat(1, 5, CV_64F, D1);
	CvMat _D2 = cvMat(1, 5, CV_64F, D2);
	CvMat _R = cvMat(3, 3, CV_64F, R);
	CvMat _T = cvMat(3, 1, CV_64F, T);
	CvMat _E = cvMat(3, 3, CV_64F, E);
	CvMat _F = cvMat(3, 3, CV_64F, F);
	if (displayCorners)
		cvNamedWindow("corners", 1);

	if (!f)
	{
		fprintf(stderr, "can not open file %s\n", imageList);
		return;
	}
	for (i = 0;; i++) //循环,每次在buf中读取一幅图像,左右图像交替的读取
	{
		char buf[1024];
		int count = 0, result = 0;
		lr = i % 2;
		vector<CvPoint2D32f>& pts = points[lr];
		if (!fgets(buf, sizeof(buf)-3, f)) //从f所指文件结构中读取一行存入buf中
			break;
		size_t len = strlen(buf);
		while (len > 0 && isspace(buf[len - 1]))
			buf[--len] = '\0';
		if (buf[0] == '#')
			continue;
		IplImage* img = cvLoadImage(buf, 0);//加载图像
		if (!img)
			break;
		imageSize = cvGetSize(img);
		imageNames[lr].push_back(buf);
  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值