关于双目棋盘格标定图片的采集程序

作者之前在做棋盘格双目标定的时候是同时开启两个摄像头的驱动拍摄视频,然后举着棋盘格做出不同的姿势,然后再在左目和右目视频中找到对应的棋盘格姿势,把对应的帧挑出来作为标定的源图片,后来发现这样做误差太大,因为我们身体会有一定的小晃动,虽然左右帧看起来很类似,但是在标定程序看来还是有很大误差的。所以开始写个标定图片采集程序。
运行平台为VS2019,opencv版本为3.4.2

#include <opencv2\opencv.hpp>
#include <iostream>
#include <windows.h>
#include<string>
#include<vector>

using namespace cv;
using namespace std;

#define typecam//2个相机驱动

//int main17060500()
int main()
{
	Mat view0;

#ifndef typecam
	
#else
	VideoCapture m_InputCapturel(1);
	VideoCapture m_InputCapturer(2);

	m_InputCapturel.set(CV_CAP_PROP_FRAME_WIDTH, 1920);
	m_InputCapturel.set(CV_CAP_PROP_FRAME_HEIGHT, 1080);
	m_InputCapturer.set(CV_CAP_PROP_FRAME_WIDTH, 1920);
	m_InputCapturer.set(CV_CAP_PROP_FRAME_HEIGHT, 1080);

	while (!m_InputCapturel.isOpened())
	{
		Sleep(2);
		cout << "cannot open the cameral!" << endl;
	}
	while (!m_InputCapturer.isOpened())
	{
		Sleep(2);
		cout << "cannot open the camerar!" << endl;
	}

#endif // !typecam




	printf("按“C”键截取当前帧并保存为标定图片...\n按“Q”键退出截取帧过程...\n\n");

	int number_image = 1;
	string str1;
	str1 = ".jpg";
	char filenamel[1024] = "";
	char filenamer[1024] = "";

	for (;;)
	{
		Mat mLeftView, mRightView;

#ifndef typecam

#else
		m_InputCapturel >> mLeftView;
		m_InputCapturer >> mRightView;
#endif // !typecam
		imshow("cameraR", mRightView);
		imshow("cameraL", mLeftView);
		waitKey(1);
		char mod;
		cout << "请输入mod:" << endl;
		cin >> mod;

		if (mod == 'c' || mod == 'C')
		{
			sprintf_s(filenamel, "C:/Users/17864/Desktop/Python/binocularResult/calibration pictures/Left/left%d.jpg", number_image);
			//printf(mod);
			cout << filenamel << endl;
			imwrite(filenamel, mLeftView);

			sprintf_s(filenamer, "C:/Users/17864/Desktop/Python/binocularResult/calibration pictures/Right/right%d.jpg", number_image);
			imwrite(filenamer, mRightView);

			cout << "成功获取当前帧,并以文件名" << filenamel << "保存...\n\n";
			cout << "成功获取当前帧,并以文件名" << filenamer << "保存...\n\n";
			printf("按“C”键截取当前帧并保存为标定图片...\n按“Q”键退出截取帧过程...\n\n");
			number_image++;
		}
		else if (mod == 'q' || mod == 'Q')
		{
			printf("截取图像帧过程完成...\n\n");
			cout << "共成功截取" << --number_image << "帧图像!!\n\n";
			break;
		}
	}
	return 0;
}

该程序运行后在dos窗口输入c或者C即可实现同时采集左右标定图片,想退出可以选择q或者Q。正常来说标定图片采集20组双目标定图即可。如果有什么困惑请在下面评论。

### 回答1: 在Matlab中进行双目相机标定时,常用的方法是基于棋盘图像的标定方法。下面我将简要介绍如何在CSDN上使用Matlab进行双目相机标定。 首先,在CSDN中搜索“Matlab双目相机标定棋盘图”,会有很多相关的教程和代码。选择一篇合适的教程并阅读。 接下来,准备一副双目相机拍摄的棋盘图像。可以使用相机自带的软件进行拍摄,或者是下载一些公开的双目相机标定图像数据集。 在Matlab中,导入相机标定所需的图像和相应的棋盘参数。然后,使用`stereoCameraCalibrator`函数创建一个双目相机标定器对象。通过调用该对象的`addImagePairs`方法,逐步添加图像对进行标定。 接下来,点击标定工具界面的"标定"按钮。Matlab会自动计算相机的内参数和外参数,并生成校正后的图像。可以通过`showExtrinsics`函数查看双目相机的外参数。 接着,在标定工具界面的"立体标定"标签中,点击"标定"按钮进行双目立体标定。Matlab会计算双目相机的立体校正参数和视差映射参数。可以使用`showStereomodel`函数查看立体标定结果。 最后,将得到的双目相机标定结果保存,并根据需要进行立体视觉相关的后续处理。 以上是使用Matlab进行双目相机标定的基本步骤,通过在CSDN上搜索相关资料可以找到更详细的教程和示例代码,帮助理解和实践双目相机标定。 ### 回答2: 双目标定是指在使用双目相机进行测量和计算时,需要对相机的内外参数进行标定。而在Matlab中,有一个工具箱可以方便地实现双目标定,其中一种常见的标定方法就是使用棋盘图像来进行标定。 首先,在CSDN上搜索关键词“双目Matlab标定棋盘图”,可以找到很多相关教程和代码示例。其中,一般会先要求准备一张标定棋盘图像,并确定棋盘的尺寸,例如每个子的边长。 接下来,在Matlab中,可以使用棋盘图像来提取棋盘的角点坐标。Matlab中提供了相关函数来实现这个过程,例如`detectCheckerboardPoints`函数可以用来检测棋盘图像中的角点位置。 得到角点的坐标后,可以使用`stereoCameraCalibrator`函数来进行双目相机的标定。在这个函数中,需要输入左右相机的角点坐标和棋盘的尺寸等参数。函数会自动计算出相机的内外参数,并且提供一个界面用于可视化标定结果。 最后,可以根据标定结果来进行双目的测量和计算。通过将左右相机的图像转换到世界坐标系中,可以得到双目测量的结果,例如三维物体的坐标、深度等信息。 总而言之,在Matlab中进行双目相机的标定,可以通过使用棋盘图像和相关函数来实现。这样可以方便地得到相机的内外参数,从而进行双目测量和计算。同时,CSDN上也有很多相关教程和代码示例可供参考和学习。 ### 回答3: 双目摄像头的标定是为了解决双目视觉中的相机畸变、视差和尺度问题,以便在后续的三维重建和深度估计中能够准确地测量物体的距离和位置。 在Matlab中,我们可以使用Camera Calibration Toolbox来进行双目相机的标定。首先,我们需要准备一副标定棋盘图像。这里建议使用常见的8×6或9×6大小的棋盘,确保棋盘上的方数量尽量多。然后,我们需要对每一眼的摄像头单独标定,包括计算相机内参数和外参数。 首先,我们选择一个合适的图像进行相机标定。然后,利用Matlab的Image Acquisition Toolbox来采集棋盘图像。通过Matlab提供的函数imread()读取图像,并使用detectCheckerboardPoints()函数检测出棋盘的角点。接下来,我们使用estimateCameraParameters()函数来对相机进行标定,该函数会自动计算相机的内外参数,并返回标定结果。 在进行标定时,需要注意以下几个问题。首先,保持棋盘图像处于不同的角度和距离,以覆盖相机的整个视野范围。其次,标定时尽量选择不同的光照条件,以克服光照变化对标定结果的影响。最后,对于双目相机,我们需要分别对左右两个摄像头进行标定,以获得双目系统的内外参数。 标定完成后,我们可以使用标定结果对双目图像进行校正,以去除相机的畸变。这可以通过Matlab中的stereoParameters()函数实现。另外,在得到标定结果后,我们还可以计算像素与世界坐标之间的映射关系,以实现三维重建和深度估计等应用。 总而言之,在标定双目摄像头时,我们只需要准备合适的标定棋盘图像,使用Matlab提供的Camera Calibration Toolbox对摄像头进行标定,然后根据标定结果进行校正和后续的应用即可。标定过程相对简单,但对于双目视觉应用的准确性至关重要。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值