如何使用循环处理 Visual C++ 中文件夹中存在的所有图像
Posted
技术标签:
【中文标题】如何使用循环处理 Visual C++ 中文件夹中存在的所有图像【英文标题】:How to use loop to Process all images present in folder in visual C++ 【发布时间】:2014-10-26 12:15:41 【问题描述】:目标:对文件夹中存在的所有图像一一执行操作
到目前为止:使用objOpenFileDialog->ShowDialog();
获取第一个文件的名称,然后使用 System::String^ imgName = objFileDialog->FileName;
问题:
1. blank image.data by Mat image = imread("imgName", CV_LOAD_IMAGE_GRAYSCALE);
2. 如何使用循环到达最后一张图片(图片名称为带有特殊字符的数字)?
【问题讨论】:
但你知道,你不能 imread() 使用 System::String^ 吗? 我对'^'有疑问,但无法解决。那我怎样才能得到“image.jpg”? 您必须使用 c++ std::string、const char* 或 cv::String。 opencv 不支持托管 System::String 类型。帮自己一个忙,在托管/表单代码和 opencv 代码之间有一个明确的分水岭。 但是,objFileDIalog->FileName 返回类型是String^。 ***.com/questions/26535662/… 【参考方案1】:我遇到了和你一样的问题,并且有办法解决它,但不知道这是否是正确的方法。
char * filepath = new char[100];
for(int j=0; j<n_images ; j++) // for all images
sprintf(filepath,"/home/datasets/img-%i.png",j); // changing the path
Mat image = imread(filepath, CV_LOAD_IMAGE_GRAYSCALE);
your code here (.....)
我的图片被命名为“img-0.png”、“img-1.png”、“img-2.png”等。您可以将代码调整为您想要的名称。
运行时图像版本数:
Mat image = imread("/home/datasets/img-0.png", CV_LOAD_IMAGE_GRAYSCALE );
int j=0;
while(image.data)
sprintf(filename,"/home/datasets/img-%i.png",j);
image = imread(filename, CV_LOAD_IMAGE_GRAYSCALE );
if(!image.data )
// no more images
break;
( your code... )
j++;
【讨论】:
如果您不知道文件夹中存在的图像数量怎么办? int n_images 应该在运行时设置......但不知道如何。以上是关于如何使用循环处理 Visual C++ 中文件夹中存在的所有图像的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Windows 上使用 Visual C++ 强制加载链接库
使用 Visual C++ 2008 时如何解决未处理的异常错误?