VS2010 MFC+openCV2.4.9 显示一个文件夹下的所有图片

直接上代码:前面一部分是选择一个包含图片的文件夹,后面一部分是遍历此文件夹,显示所有的图片

#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);
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值