直接上代码:前面一部分是选择一个包含图片的文件夹,后面一部分是遍历此文件夹,显示所有的图片
#include <opencv2/opencv.hpp> //包含头文件
#include <algorithm> //必需加这个头文件
using namespace cv; //使用命名空间cv,下面的cv::line等的前缀可以不写
void CphotoProcessDlg::OnBnClickedButton1()
{
// TODO: 在此添加控件通知处理程序代码
char szPath[MAX_PATH]; //存放选择的目录路径
CString strPathName;
ZeroMemory(szPath, sizeof(szPath));
BROWSEINFO bi;
bi.hwndOwner = m_hWnd;
bi.pidlRoot = NULL;
bi.pszDisplayName = szPath;
bi.lpszTitle = "请选择需要打包的目录:";
bi.ulFlags = 0;
bi.lpfn = NULL;
bi.lParam = 0;
bi.iImage = 0;
//弹出选择目录对话框
LPITEMIDLIST lp = SHBrowseForFolder(&bi);
if(lp && SHGetPathFromIDList(lp, szPath)){
strPathName.Format("%s", szPath);
AfxMessageBox(strPathName);
}
else
AfxMessageBox("无效的目录,请重新选择");
if (strPathName.IsEmpty()){
AfxMessageBox(_T("请选择图片所在的文件夹!"));
}
strPathName +="\\*.*";
CFileFind finder;
CStringList filelist;//文件列表
unsigned long filenum=0;
BOOL bResult=finder.FindFile(strPathName);
if(!bResult){
AfxMessageBox(_T("未找到图像文件!"));
return;
}
while (bResult)
{
bResult = finder.FindNextFile();
//判断是否是目录或者是隐藏文件,又或者是".."和".",如果是,进入下一轮循环
if(finder.IsDirectory()|| finder.IsDots() || finder.IsHidden())
continue;
else//如果是文件
{
CString str;
//得到文件名
str = finder.GetFileName();
//得到文件后缀名
int nLen = str.GetLength() - finder.GetFileTitle().GetLength();
str = str.Right(nLen);
//判断文件格式,如果是图像文件,将其完整的路径保存在列表中
if(str == ".jpg" || str == ".png" || str == ".bmp" || str == ".gif"|| str == ".tif"){
filelist.AddTail(finder.GetFilePath());
//AfxMessageBox(finder.GetFilePath());
CString filePath = finder.GetFilePath();
Mat imageInput = imread(filePath.GetBuffer(0));
imshow("photos", imageInput);//显示图片
waitKey(500);//暂停0.5S
}
}
}
finder.Close();
filenum=filelist.GetCount();
m_photoNum = filenum;
UpdateData(FALSE);
}