c++ - 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);
解决方案
我猜fd.name
只是文件名和相对于path
,imread
不能“猜测”你给的文件夹路径_findfirst
您应该尝试打开path + "\\" + fd.name
(假设path
尚未以反斜杠结尾...)
例如:
std::string fullFileName = path + "\\" + fd.name;
Mat image0 = imread(fullFileName.c_str());
顺便说一句:检查是否无法读取图像的正确方法是:
if(image.empty())
推荐阅读
- maven - How to execute ant jar from maven-antrun-plugin
- apache - rewrite rule to redirect to SEO friendly URL
- jmeter - 如何从 Jmeter 中的 CSV 获取线程数和持续时间
- c# - 我必须使用旧的 .net 技术做一个项目,VS2017 是否与旧技术兼容?
- c# - How to Convert Keyboard to Touch controller
- excel - Excel VBA AccessApplication.OpenCurrentDatabase Not Working
- python - How to merge data from multiple dicts into a single row in a DataFrame
- ios - Obj-C - didSelectRowAtIndexPath not firing?
- vb.net - Graphically detect a control on a form in vb.net
- python - grabbing from data set with mulitple json roots