本项目是一个功能完整的图像处理程序,实现了图像I/O、数据压缩、彩色转灰度、图像缩放等基本功能,并提供了Web界面交互。项目采用C++语言实现,使用OpenCV作为核心图像处理库,结合Crow框架提供Web服务。
本项目是数据结构与算法的课程项目。
- 支持多种图像格式的读取(JPG、PNG、PPM等)
- 图像显示功能
- 处理后图像的保存
- 三元组结构表示图像(行、列、像素值)
- 实现三元组数据的压缩存储算法
- 支持压缩数据的解码与还原
- 彩色图像转灰度图像(支持自定义权重)
- 图像亮度和对比度调整
- 图像饱和度调整
- 图像直方图均衡化
- 图像反色处理
- 图像放大至指定尺寸
- 图像缩小至指定尺寸
- 支持不同的插值算法
- 基于Crow框架的轻量级Web服务器
- 直观的浏览器界面
- 支持图像上传、处理和下载
image_processor/
├── .gitignore # Git忽略文件配置
├── 3rdparty/ # 第三方依赖库
│ ├── asio/ # asio库,Crow框架的依赖
│ ├── crow/ # Crow Web框架
│ └── opencv/ # OpenCV图像处理库
├── assets/ # 测试图像资源
├── build/ # 编译输出目录
├── include/ # 项目头文件
│ ├── color_processing.hpp # 颜色处理功能声明
│ ├── compression.hpp # 图像压缩功能声明
│ ├── image_io.hpp # 图像I/O功能声明
│ ├── image_scaling.hpp # 图像缩放功能声明
│ ├── logger.hpp # 日志功能声明
│ └── web_server.hpp # Web服务器声明
├── src/ # 源代码目录
│ ├── core/ # 核心图像处理实现
│ │ ├── color_processing.cpp # 颜色处理实现
│ │ ├── compression.cpp # 图像压缩实现
│ │ ├── image_io.cpp # 图像I/O实现
│ │ ├── image_scaling.cpp # 图像缩放实现
│ │ └── logger.cpp # 日志功能实现
│ ├── ui/ # Web服务器实现
│ │ └── web_server.cpp # Crow Web服务器实现
│ └── main.cpp # 程序入口
├── test/ # 测试目录
├── web/ # Web前端资源
| ├── js/ # 前端交互脚本
│ │ ├── color.js # 颜色操作脚本
│ │ ├── download.js # 下载操作脚本
│ │ ├── main.js # 主脚本
│ │ ├── process.js # 主处理脚本
│ │ ├── scale.js # 缩放操作脚本
│ │ ├── scroll_control.js # 鼠标滚轮辅助脚本
│ │ ├── state.js # 脚本间内容共享
│ │ └── upload_area.js # 图像上传区域脚本
│ ├── index.html # Web界面主文件
│ └── style.css # 前端样式定义
├── CMakeLists.txt # 项目构建配置文件
└── README.md # 项目介绍
- 编程语言: C++
- 图像处理库: OpenCV
- Web框架: Crow (基于asio)
- 构建系统: CMake
- 确保已安装CMake和C++编译器
- 在项目根目录创建build目录(如果不存在)
- 进入build目录,运行CMake和编译命令
mkdir -p build
cd build
cmake ..
cmake --build .- 编译成功后,在build目录中找到可执行文件
- 运行程序
./ImageProcessor- 程序启动后,会询问是否启动Web服务器
- 输入"y"启动服务器,然后在浏览器中访问 http://localhost:8000
- 上传图像并使用各种图像处理功能
- 上传图像: 点击"选择文件"按钮上传图像文件
- 图像处理:
- 彩色转灰度: 使用"灰度转换"功能
- 调整亮度/对比度: 使用相应的滑块控制
- 图像缩放: 输入目标尺寸并点击"缩放"
- 保存结果: 处理完成后,点击"下载"按钮保存处理后的图像
- 负责图像的读取、保存和显示
- 支持多种图像格式
- 提供各种颜色处理功能
- 支持自定义参数调整
- 实现图像数据的压缩存储
- 基于三元组结构的压缩算法
- 实现图像尺寸调整功能
- 支持不同的插值方法
- 提供Web服务接口
- 处理客户端请求和图像处理命令
- 模块化设计: 代码结构清晰,各功能模块独立
- 易于扩展: 可以方便地添加新的图像处理功能
- 友好界面: Web界面直观易用
- 跨平台: 支持Windows、Linux等多种操作系统
本项目仅供学习使用,基于课程要求开发。