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

在这个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图像读取、转换和保存的基本流程。如果你需要对图片进行更复杂的操作,如特征提取、滤波或机器学习应用,可以在此基础上扩展。
相关推荐










lexi_qi
- 粉丝: 178
最新资源
- Android开源项目合集:实用小工具与源码大全
- 轻松美化代码:sublime HTML-CSS-JS Prettify插件
- C#开发必备:常用类库全解析
- ASRock华擎H77M主板BIOS 1.60版升级要点解析
- 局部化脸部特征实时视频转变技术深度解析
- 数据存储解决方案与实践指南
- Laravel与Vue.js打造投票系统详解
- 掌握SublimeLinter:Sublime文本插件的安装与配置
- 实现单表增删改查的SSH框架整合教程
- C#实现两点间平行动态字体绘制方法
- LFM与巴克码组合信号MATLAB仿真分析
- 华擎Z87超频主板BIOS 1.70版升级详解
- Unreal Development Kit入门教程:创建塔防游戏
- Sublime Text 3的使用技巧与插件推荐
- 激光引导设备:救援与紧急疏散的技术革新
- Qt仿qq浮动弹窗插件封装及跨平台使用教程