MFC的相机双目标定界面设计


一、先上整体的界面图

由于是新手,所以采用的拖控件的方法,而且界面的美化基本没有。

标定界面

二、主要使用的控件

按钮控件:BUTTON (3个)分别用来实现添加图片,标定,查看标定结果。
静态文本控件:Static Text 这里主要用来做标记。
编辑框控件: Edit Control(2个) 用来显示标定结果和选择结果。
列表控件:List Control(1个) 用来显示读取的图片列表。
图片显示控件: Picture Control(2个) 用来显示每组的左右图片。
类向导中可以看到基本的控件名以及成员变量

三、具体实现代码

1.标定主要使用的Opencv,所以环境就先配置好,这里不赘述,主要就是几个按钮功能的实现。

添加图片的实现代码如下:

void CStereoCameraCalibratorDlg::OnBnClickedButton1Addimages()
{
   
   
	// TODO: 在此添加控件通知处理程序代码
	
	CFileDialog OpenFileDlg(TRUE/*FALSE为保存*/, _T("ALL(*.*)|*.*|BMP(*.bmp)|*.bmp|JPEG(*.jpg)|*.jpg|PNG(*.png)|*.png||"),
		NULL, OFN_ALLOWMULTISELECT | OFN_ENABLESIZING | OFN_HIDEREADONLY, _T("All(*.*)|*.*|BMP(*.bmp)|*.bmp|JPEG(*.jpg)|*.jpg|PNG(*..png)|*.png||"));
	TCHAR *pBuffer = new TCHAR[MAX_PATH * 50];
	OpenFileDlg.m_ofn.lpstrFile = pBuffer;
	OpenFileDlg.m_ofn.nMaxFile = MAX_PATH * 50;
	OpenFileDlg.m_ofn.lpstrFile[0] = '\0';
	std::vector<CString> BatchImgpaths;
	CString imgPath;

	if (BatchLimg.size() == 0) {
   
   
		MessageBox(TEXT("请先选择左图!"));
	}
	

	if (OpenFileDlg.DoModal() == IDOK)
	{
   
   
		CString BatchImgpath = _T("");
		CString imgName = _T("");
		POSITION pos = OpenFileDlg.GetStartPosition();
		while (pos != NULL)
		{
   
   
			BatchImgpath = OpenFileDlg.GetNextPathName(pos);
			CString temp = OpenFileDlg.GetFileTitle();
			BatchImgpaths.push_back(BatchImgpath);
			int length = BatchImgpath.GetLength();
			for (int i = length - 1; i > 0; i--)
			{
   
   
				if (BatchImgpath[i] == '\\')
				{
   
   
					//判断当前字符是否是'\'
					imgName = BatchImgpath.Right(length - i - 1);
					BatchLimg.size() == 0 ? BatchLImgNames.push_back(imgName.GetBuffer()) : BatchRImgNames.push_back(imgName.GetBuffer());
					break;   //跳出循环
				}
			}
		}
	}

	if (BatchLimg.size() == 0)
	{
   
   
		for (int i = 0; i  < BatchImgpaths.size(); i++)
		{
   
   
			cv::Mat Limg = cv::imread(BatchImgpaths[i].GetBuffer());
			BatchLimg.push_back(Limg);
		}
		return;
	}
	for (int i = 0; i < BatchImgpaths.size(); i++)
	{
   
   
		cv::Mat Rimg = cv::imread(BatchImgpaths[i].GetBuffer());
		BatchRimg.push_back(Rimg);
	}

	//在列表视图控件中插入数据   行插
	for (int i = 0; i < BatchLimg.size(); i++)
	{
   
   
		int a = 1;
		CString str;
		str.Format(_T("%d"), i);
		int nRow = m_PicList.InsertItem(i, str);
		CString LItem = "L" + str;
		m_PicList.SetItemText(i, a, LItem);
		CString RItem = "R" + str;
		m_PicList.SetItemText(i,
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值