opencv c++调用glob没有匹配的函数
时间: 2023-06-13 15:03:58 浏览: 179
opencv4.0.1库,支持匹配
如果你使用 OpenCV 的 C 接口,你可能需要使用 C 的 glob 函数来获取指定目录下的文件列表。但是,如果你在调用 glob 函数时没有匹配到任何文件,它会返回一个错误代码,这可能会导致程序崩溃。
为了避免这种情况,你可以在调用 glob 函数之前检查目录是否存在,并且使用 glob 的返回值来检查是否有文件匹配成功。
以下是一个示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <glob.h>
#include <opencv2/opencv.hpp>
int main(int argc, char** argv)
{
if (argc < 2) {
printf("Usage: %s <directory>\n", argv[0]);
return -1;
}
// 检查目录是否存在
if (access(argv[1], F_OK) != 0) {
printf("Directory does not exist: %s\n", argv[1]);
return -1;
}
// 使用 glob 获取文件列表
glob_t glob_result;
int ret = glob(argv[1], GLOB_TILDE, NULL, &glob_result);
if (ret != 0) {
printf("Failed to get file list: %s\n", strerror(errno));
return -1;
}
// 检查是否有文件匹配成功
if (glob_result.gl_pathc == 0) {
printf("No file matched.\n");
globfree(&glob_result);
return -1;
}
// 处理文件列表
for (int i = 0; i < glob_result.gl_pathc; i++) {
cv::Mat img = cv::imread(glob_result.gl_pathv[i]);
if (img.empty()) {
printf("Failed to load image: %s\n", glob_result.gl_pathv[i]);
} else {
// 处理图片
}
}
globfree(&glob_result);
return 0;
}
```
在这个示例代码中,我们首先检查了命令行参数是否正确,然后检查了指定的目录是否存在。接着,我们使用 glob 函数获取文件列表,并检查是否有文件匹配成功。最后,我们遍历文件列表,读取图片并进行处理。在结束程序之前,我们使用 globfree 函数释放内存。
希望这个示例代码可以帮助你解决问题。
阅读全文