显示多幅图像
来源:互联网 发布:儿童绘画 知乎 编辑:程序博客网 时间:2024/06/05 18:34
文件夹中存了很多幅图像,我需要选中这个文件夹,然后程序可以自动的从这个文件夹中连续读入图像,每读入一幅图像都要进行相应的处理,处理完后再读入下一副图像,直到都处理完结束。图像的命名是有规则的,并且每幅图象556*406象素,需要都读入进行处理,或读一幅处理一幅
可以用CFileFind类得到目录下所有文件,可以根据文件名字特征、扩展名筛选出你所要处理的文件,然后遍历处理
CFileFind ff;
BOOL bF = ff.FindFile(szPath + "\\*.*");
while(bF)
{
bF = ff.FindNextFile();
filePath = ff.GetFilePath();
if(/*file为你所要处理的图像*/)
{
/* 处理*/
}
}
VC代码,功能很完整。可以只选择文件夹中的一幅图像,然后点OK,会自动遍历
整个文件夹。读取各个文件的完整路径到一个vector中,并不把所有图像读进内存,这样可以
节省不必要的内存开销。 在处理函数中,根据这些完整的路径,打开一个处理一个释放一个。
直到处理完所有图像。
- C/C++ code
int CBatch::FileOpenEx(){ int counter=0; CString ss=""; pair<map<CString,CString>::iterator,bool> Pair_Insert; int nimg=0; CString ftitle,fname,fpath,fpathname,froot; CString mp[7]; static char szFilter[] = "*.BMP|*.BMP|All Files(*.*)|*.*||"; CFileDialog FileDlg( TRUE, NULL, NULL,OFN_HIDEREADONLY, szFilter ); if( FileDlg.DoModal() == IDOK ) { fpathname=FileDlg.GetPathName(); CFileFind finder; finder.FindFile(fpathname); finder.FindNextFile(); froot=finder.GetRoot(); BOOL bResult; fpathname=froot+_T("\\*.*"); //找到该文件的文件夹, bResult=finder.FindFile(fpathname); //然后从头开始一个一个遍历 while (bResult) { counter++; bResult=finder.FindNextFile(); if(finder.IsDots()) continue; if(finder.IsDirectory()) continue; fname=finder.GetFileName(); if("bmp" !=fname.Right(3) && "BMP" !=fname.Right(3) ) continue; //找到了一个bmp文件,开始提取相关信息 FPRO fpro;//自定义的一个结构体 fpro.filePath =finder.GetFilePath(); // 路径和文件名,包括扩展名。 fpro.fileName = finder.GetFileName(); fpro.fileTitle = finder.GetFileTitle(); m_imvec.push_back(fpro); }// while }// if BatchProcess(); return 1 ;}int CBatch::BatchProcess(){ CMainFrame * pMain = (CMainFrame*) AfxGetApp()->m_pMainWnd; CBlurEstimation3View *pView = (CBlurEstimation3View*) pMain->GetActiveView(); IMIter it_start,it_end,it; for (it= m_imvec.begin(); it!=m_imvec.end(); ++it) { CString Dir = it->filePath; if (dib.Load(Dir)) { CClientDC dc(pView); dib.SetPalette(&dc); dib.Draw(&dc); } else continue; int width = dib.m_Width; int height = dib.m_Height; int srcLineBytes = dib.m_DataSize/height; int residual= 4 - width%4; if(residual ==4) residual =0; if(dib.m_DataSize == width*height) residual = 0; width = width - width%4;#pragma region //分配内存,读取1D图像数据 BYTE *pBits = new BYTE[width*height]; //分配内存,读取2D 图像数据// BYTE **p2DBits = new BYTE *[height];// for(int i=0; i<height; ++i)// p2DBits[i] = new BYTE[width]; BYTE pixel; for(int i=0; i<height;++i) for(int j=0; j<width; ++j) { pixel = dib.m_pDibBits[srcLineBytes*i +j];// p2DBits[i][j] = pixel; pBits[i*width+j] = pixel; }#pragma endregion float param = 0;//***************************************************************// 此处添加代码// 处理// end此处添加代码//**************************************************************** CString str; str.Format("%f",param); it->param = str;// for(i=0; i<height;++i)// delete []p2DBits[i];// delete []p2DBits; delete []pBits; } return 1;}
0 0
- 显示多幅图像
- Matlab显示多幅图像
- opencv 如何显示多幅图像
- opencv一个窗口显示多幅图像
- opencv单个窗口显示多幅图像
- 显示一幅图像
- 单/多图像显示
- 在Matlab中同时显示多幅图像的例子
- Opencv 读取多幅图像,并且每3秒显示
- PyQt 4 显示多幅图像,并编辑打包
- opencv——同一窗口显示多幅图像
- OpenCV单窗口显示多幅图像的代码
- 图像显示
- 显示图像
- 图像显示
- 显示图像
- 图像显示
- 图像显示
- Chrome浏览器,An invalid form control with name='' is not focusable. 问题处理
- 405 Method Not Allowed
- 计算机视觉常用链接
- substring substr
- ASSERT 和 ASSERT_VALID
- 显示多幅图像
- MFC由CView转化为CScrollView
- CString LPCTSTR TCHAR
- 图像处理——边缘检测(1)
- 四种必须知道的Android屏幕自适应解决方案
- PCL初接触
- 面试题测试
- Opencv中图像滤波
- android学习1