C 编程和 OpenCV(如何从文件中读取图像并将其加载以在 openCv 中进行进一步处理)
Posted
技术标签:
【中文标题】C 编程和 OpenCV(如何从文件中读取图像并将其加载以在 openCv 中进行进一步处理)【英文标题】:C programming and OpenCV (How to read an image from a file and load it for further processing in openCv) 【发布时间】:2015-03-22 22:55:10 【问题描述】:我在 C 中创建了一个包含图像文件名的文件。代码如下(“叶子”是图像数据集。我将图像名称存储在文件中):
FILE *fp;
system("dir /B D:\\opencvprojects\\platphenotypeFinal\\platphenotypeFinal\\Leaves > file.txt");
file.txt 看起来像这样:
1001.jpg
1002.jpg
1003.jpg
1004.jpg
1005.jpg
1006.jpg
1007.jpg
现在我想从文件中读取每个图像,在 openCV 中进行背景减法,并将所有这些图像的结果保存在另一个文件中。
OriginalImage=cvLoadImage("Leaves\\1007.jpg",CV_LOAD_IMAGE_GRAYSCALE);
我知道如何读取单个图像(使用上面的代码),但我想自动读取文件的每个图像,进行处理,并将结果保存到另一个文件中,并且该过程继续循环直到所有图像都得到处理。因此,将生成一个输出文件,其中包含二进制图像的文件名(与输入文件名相同)。
非常感谢您的帮助。
int main()
CvMoments moments;
CvMemStorage *connectedCompStorage = cvCreateMemStorage (0);
CvSeq *temp = NULL; //used to loop through contour perimeter checking
CvSeq *connectedComp = NULL;
FILE *fp;
char buffer[9];
system("dir /B D:\\opencvprojects\\platphenotypeFinal\\platphenotypeFinal\\Leaves > file.txt");
fp = fopen ("file.txt", "r+");
OriginalImage = cvLoadImage("Leaves\\1108.jpg",CV_LOAD_IMAGE_GRAYSCALE);
【问题讨论】:
抱歉,但是不,抱歉。在 2015 年,C 不再是 opencv 的有效选择。该死的梦想,但你现在必须使用 c++.. 你能帮我写一下 C++ 代码吗? 请发布您目前所拥有的并告诉我们它是如何失败的 file.txt 使用上述图像的文件名成功创建。但是,我不知道如何从 file.txt 自动访问 CvloadImage 中的文件名。目前我正在使用一个正常工作的图像(即“Leaves \\1108.jpg”)。请指教。 【参考方案1】:opencv 有一个很好的 glob 函数来读取整个目录:
(请不要使用opencv的C-api!)
vector<String> files;
glob("D:\\opencvprojects\\platphenotypeFinal\\platphenotypeFinal\\Leaves\*.jpg", files);
for (size_t i=0; i<files.size(); i++)
Mat m = imread(files[i]);
// process image
【讨论】:
字符串“files”的用途是什么?以上是关于C 编程和 OpenCV(如何从文件中读取图像并将其加载以在 openCv 中进行进一步处理)的主要内容,如果未能解决你的问题,请参考以下文章
如何创建一个可以使用 Boost 和 OpenCV 读取文件夹中所有图像的程序?
如何使用C ++从opencv中的磁盘仅读取一个图像颜色通道