OpenCV批量读取与转换文件夹图片并保存

4星 · 超过85%的资源 需积分: 50 875 下载量 137 浏览量 更新于2024-09-12 8 收藏 931B TXT 举报
在这个OpenCV编程示例中,我们将探讨如何使用OpenCV库(版本2)来读取一个文件夹中的多幅图片,并将它们转换为灰度图像后保存到另一个文件夹。以下是一个详细的步骤解析: 1. 引入必要的OpenCV头文件: - `#include<opencv2/opencv.hpp>`:包含了OpenCV库的主要接口,如IplImage结构和函数声明。 - `#include<cv.h>`:包含了一些基本的图像处理函数。 - `#include<cxcore.h>`:用于处理与图像相关的数据类型和内存管理。 - `#include<highgui.h>`:提供了用于显示图像和窗口创建的函数。 - `#include<iostream>`:用于标准输入输出,方便打印信息。 - `#include<string.h>`:字符串处理相关。 - `#include<stdlib.h>`:系统调用函数。 2. 声明和初始化变量: - `IplImage *img` 和 `IplImage *dst` 分别表示输入图像和输出灰度图像的指针。 - `int argc` 和 `char* argv[]` 是命令行参数的处理,但在这个示例中并未使用。 3. 主函数 `main()`: - 使用 `for` 循环遍历指定目录("E:\ͼ\"),假设该目录下有1到10张jpg格式的图片,例如 "1.jpg", "2.jpg" 等。 - `sprintf(file_img, "E:\\ͼ\\%d.jpg", i)` 用于构建图片文件路径,动态地根据循环变量i填充图片编号。 - `img = cvLoadImage(file_img, 1)`:通过cvLoadImage函数读取指定路径下的图片,第二个参数1表示BGR格式,但因为后续会转换为灰度,所以通常不需要特别指定。 4. 图像处理: - 创建一个与输入图像大小相同的灰度图像 `dst = cvCreateImage(cvGetSize(img), 8, 1)`,其中8代表8位深度(灰度),1代表单通道。 - `cvCvtColor(img, dst, CV_RGB2GRAY)`:使用颜色空间转换函数将RGB图像转换为灰度。 - 输出当前图片序号以及使用 `cvNamedWindow` 和 `cvShowImage` 显示灰度图像。 5. 保存处理后的图片: - `sprintf(file_dst, "E:\\m\\%d.jpg", i)` 构建目标保存路径,将图片保存到 "E:\m\" 目录下,图片名称与原图片保持一致。 - `cvSaveImage(file_dst, dst)`:使用cvSaveImage函数保存图像。 6. 用户交互: - 使用 `cvWaitKey(2500)` 暂停程序运行,等待用户按键。如果按下Esc键(ASCII码27),则退出循环。 - 在循环结束后,关闭所有窗口并释放资源。 7. 清理: - `cvDestroyAllWindows()`:关闭所有显示的窗口。 - `cvReleaseImage(&img)` 和 `cvReleaseImage(&dst)`:释放之前分配的图像内存。 总结: 这个代码展示了如何使用OpenCV库的基本功能来批量读取文件夹中的图片,并进行简单的图像处理(转换为灰度)。它适合初学者了解OpenCV图像读取、转换和保存的基本流程。如果你需要对图片进行更复杂的操作,如特征提取、滤波或机器学习应用,可以在此基础上扩展。