保存了许多图像到矢量但它们不显示

时间:2012-11-19 21:49:58

标签: c++ image-processing opencv

我使用FindFirstFile库中的FindNextFile<windows.h>将文件夹的所有图片加载到矢量中。这将所有图像保存到向量images,但是当我想对向量执行任何操作时,只需要显示它们就会产生意外操作并迫使我中断代码的运行。

这是我的代码:

int _tmain(int argc, _TCHAR* argv[])
{

WIN32_FIND_DATA FindFileData;
HANDLE hFind;


vector<Mat> images;

hFind = FindFirstFile("C:\\test\\*", &FindFileData);
if (hFind != INVALID_HANDLE_VALUE)
{

    do {

        images.push_back(imread(FindFileData.cFileName , 0)); 



        } while( FindNextFile(hFind,&FindFileData));
}

//int vectorsize = (sizeof(images)/sizeof(Mat));

namedWindow("meh" , CV_WINDOW_AUTOSIZE);
    imshow("meh" , images[3]);
    waitKey(0);

/*for(int x = 1; x < 8; x++)
{
    namedWindow("meh" , CV_WINDOW_AUTOSIZE);
    imshow("meh" , images[x]);
    waitKey(0);
}*/

/*vector<Mat>::iterator it;

for (it = images.begin(); it != images.end() ; it++) {
    imshow("myWin", (*it));
    waitKey(0);
}*/

FindClose(hFind);
return 0;
}

可以看出我尝试使用迭代器处理向量,但它在imshow处给出了相同的错误。

然后我使用sizeof查找向量中的总元素但失败了(因为向量大小参数返回0

然后我从矢量中选择了一个随机图像并尝试显示它,但在imshow得到了相同的错误。

EDIT:我不想测试文件夹包含8个图像,但循环运行10次。这是因为目录中的第一个和第二个文件是...(这在使用cout打印名称时显示)这可能是导致中断的原因吗?如果是这样,我该如何解决呢?

2 个答案:

答案 0 :(得分:2)

我认为在你的情况下你应该进行!m.empty()检查以查看你推回的图像是否正确加载。

对于编辑部分:您可以在“C:\ test \ * .jpg”上找到文件。那会跳过“。”和“..”(和其他非图像的东西)也是。

(我认为还有一个Microsoft语法“C:\ test \ *。jpg; C:\ test \ * .png”用于多个扩展,但我不确定。)

答案 1 :(得分:1)

好吧,我把它整理好了。问题出在FindFileData.cFileName,因为它只返回文件的名称,而不是文件的完整路径,imread需要。

我通过使用strcat并将文件夹的路径与找到的文件名连接来解决了这个问题。

images.push_back(imread((strcat(loc,FindFileData.cFileName)) , 0));

当然需要每次清除字符串loc,因为它不适用于下一个循环。