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 中进行进一步处理)的主要内容,如果未能解决你的问题,请参考以下文章

如何opencv读取摄像头并保存每一帧图像

如何创建一个可以使用 Boost 和 OpenCV 读取文件夹中所有图像的程序?

OpenCV:从文件夹中读取图像系列

如何使用C ++从opencv中的磁盘仅读取一个图像颜色通道

OpenCV入门(C++/Python)- 使用OpenCV读取和编写视频

从文件夹中读取图像(OpenCV)