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,