首页 > 解决方案 > c代码文件读取错误

问题描述

我是关于在目录中读取图像的工作。在我的代码中 fd.name 没问题。但是 Mat image0 = imread(fd.name) 是 NULL 数据。那么,image0 为 NULL 有什么问题呢?

struct _finddata_t fd;
intptr_t handle;
if ((handle = _findfirst(path.c_str(), &fd)) == -1L)
    cout << "No file in directory!" << endl;
do
{

    Mat image0 = imread(fd.name);
    if (!image0.data)
        continue;
    Mat image;
    cvtColor(image0, image, CV_BGR2GRAY);
    const int width = image.cols;
    const int height = image.rows;


    vector<feature_P> vec;

    SIFT(image, vec);


    for (int i = 0; i < vec.size(); i++)
    {
        if (vec.at(i).x > 4 && vec.at(i).x < height - 4 && vec.at(i).y > 4 && vec.at(i).y < width - 4)
        {
            int result = LBP(image, vec.at(i).x, vec.at(i).y);
            int fake = rand() % 250 + 100;
            fprintf(fp, "+1 1:%d\n-1 1:%d\n", result, fake);
        }
    }
    cout << fd.name << endl;
} while (_findnext(handle, &fd) == 0);
_findclose(handle);

标签: c++opencv

解决方案


我猜fd.name只是文件名和相对于pathimread不能“猜测”你给的文件夹路径_findfirst

您应该尝试打开path + "\\" + fd.name(假设path尚未以反斜杠结尾...)

例如:

std::string fullFileName = path + "\\" + fd.name;
Mat image0 = imread(fullFileName.c_str());

顺便说一句:检查是否无法读取图像的正确方法是:

if(image.empty())

推荐阅读