OpenCV批量读取与转换文件夹图片并保存
4星 · 超过85%的资源 需积分: 50 43 浏览量
更新于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图像读取、转换和保存的基本流程。如果你需要对图片进行更复杂的操作,如特征提取、滤波或机器学习应用,可以在此基础上扩展。
2017-09-13 上传
点击了解资源详情
2023-05-16 上传
2018-09-14 上传
530 浏览量
2021-12-10 上传
2018-06-01 上传
lexi_qi
- 粉丝: 177
- 资源: 24
最新资源
- Android圆角进度条控件的设计与应用
- mui框架实现带侧边栏的响应式布局
- Android仿知乎横线直线进度条实现教程
- SSM选课系统实现:Spring+SpringMVC+MyBatis源码剖析
- 使用JavaScript开发的流星待办事项应用
- Google Code Jam 2015竞赛回顾与Java编程实践
- Angular 2与NW.js集成:通过Webpack和Gulp构建环境详解
- OneDayTripPlanner:数字化城市旅游活动规划助手
- TinySTM 轻量级原子操作库的详细介绍与安装指南
- 模拟PHP序列化:JavaScript实现序列化与反序列化技术
- ***进销存系统全面功能介绍与开发指南
- 掌握Clojure命名空间的正确重新加载技巧
- 免费获取VMD模态分解Matlab源代码与案例数据
- BuglyEasyToUnity最新更新优化:简化Unity开发者接入流程
- Android学生俱乐部项目任务2解析与实践
- 掌握Elixir语言构建高效分布式网络爬虫