将许多图像保存到矢量中,但它们不显示
Saved many images to vector but they do not display
我使用<windows.h>
库中的FindFirstFile
和FindNextFile
将文件夹的所有图像加载到向量中。这将所有图像保存到向量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
打印名称时显示)这可能是导致中断的原因吗?如果是,我该如何解决?
我认为您应该在您的情况下进行!m.empty()
检查,看看您推送的图像是否正确加载。
对于EDIT部分:您可以在"C:\test\*.jpg"上找到文件。这也会跳过"."answers".."(以及其他非图像内容)。
(我认为微软也有一个针对多个扩展名的语法"C:\test\*.jpg;C:\test\*.png",但我不确定。)
好吧,我把它整理好了。问题出在FindFileData.cFileName
上,因为它只返回文件名,而不是imread
所需的文件的完整路径。
我通过使用strcat
并将文件夹的路径与找到的文件名连接起来,解决了这个问题。
images.push_back(imread((strcat(loc,FindFileData.cFileName)) , 0));
当然,每次都需要清除字符串loc,因为它不适用于下一个循环。
- C++,OpenCV,尝试显示图像时"OpenCV(4.3.0) Error: Assertion failed (size.width>0 && size.height>0)"此错误
- C++射线示踪剂ppm表示没有足够的数据来显示图像
- 我在 OpenGL 中显示图像时遇到问题
- 无法在 Opencv 中显示图像导致内存位置
- 从C++调用网络摄像头并在 Python 中显示图像
- C++列出屏幕以在第二台显示器中显示图像
- 如何用QT显示图像
- 如何在 QGraphicsView 中显示图像
- C++/openCV - 为什么显示图像会产生 Linux 分割错误?(打开CV错误?
- 在C 中显示图像及其元数据
- C++显示图像并将其保持到下一张图像的最佳方法
- 如何使用SDL_surface在用户定义的矩形上显示图像?
- 如何使用QVector的QPixmap显示图像?
- 如何在任何使用 Opencv 的计算机上显示图像
- 使用 qt 和 opengl、定时精度和垂直同步问题、c++ 显示图像
- QLabel像视频一样显示图像
- 使用 c++ 显示图像
- Qt表查看单元格中的显示图像并在单击时获取路径
- 在Visual C 控制台应用程序中显示图像
- 如何使用Createbsection显示图像