项目时间:2026.05 – 2026.06 · 图像处理方向综合练习项目
基于 OpenCV 的三个图像处理实验,覆盖视频抠像合成、滤波降噪对比、图像信息隐藏三块内容。全部程序用 Python 编写,样例素材均为程序自动生成,克隆即可运行、无需联网下载。
opencv-image-processing/
├── common/ # 公共模块
│ ├── io.py # 中文路径安全的图片读写(Windows)
│ └── metrics.py # PSNR 评估指标
├── chroma_key/ # 实验一:绿幕抠图(Chroma Key)
│ ├── generate_samples.py # 生成绿幕/背景样例
│ └── chroma_key.py # 抠图 + 合成视频
├── denoising/ # 实验二:滤波降噪对比
│ └── denoise_compare.py # 均值/中值/高斯滤波 + PSNR 量化
├── steganography/ # 实验三:LSB 信息隐藏
│ └── lsb.py # 嵌入 / 提取 / 演示
├── data/ # 自动生成的样例素材
└── output/ # 实验结果输出
- Python 3.10+
pip install -r requirements.txt(opencv-python / numpy / matplotlib)
简介:使用 OpenCV 库实现绿幕抠图系统,通过色度键(Chroma Key)技术将前景人物从绿色背景中分离并合成至自定义背景,最终输出合成视频。
实现要点:
- 基于 HSV 色度键提取绿色掩膜,通过形态学开/闭运算去除噪点与空洞;
- 高斯羽化得到柔和 alpha 通道,消除合成边缘的硬轮廓;
- 前景按 alpha 逐帧合成到自定义背景,输出 mp4 视频。
运行:
# 1. 生成样例(绿幕人物 + 自定义背景)
python chroma_key/generate_samples.py
# 2. 图片演示模式:前景上下弹跳 + 背景横向平移,合成一段 4 秒视频
python chroma_key/chroma_key.py --image data/greenscreen.png \
--background data/background.jpg --output output/chroma_key_demo.mp4
# 3. 换成自己的绿幕视频:逐帧抠图合成(视频路径支持中文)
python chroma_key/chroma_key.py --video 绿幕视频.mp4 \
--background data/background.jpg --output output/out.mp4结果:output/chroma_key_demo.mp4、output/chroma_key_demo_keyframe.png(合成关键帧)。合成帧中人物内部绿色残留约 1%(主要为边缘羽化部分),背景替换完整。
简介:对比分析均值滤波、中值滤波、高斯滤波在高斯噪声与椒盐噪声环境下的降噪性能,通过 PSNR(峰值信噪比)指标量化评估各滤波器在不同噪声强度下的表现。
实验设计:
- 高斯噪声:σ ∈ {10, 25, 50}
- 椒盐噪声:密度 ∈ {0.01, 0.05, 0.10}
- 三种滤波器统一 5×5 窗口,以 PSNR(dB) 量化(越大越好)
运行:
python denoising/denoise_compare.py
# 也可用自己的测试图: python denoising/denoise_compare.py --image 某图片结果:终端打印对比表;output/denoise_results.csv 为结构化数据,output/denoise_chart_*.png 为分组柱状图,output/denoise_visual_*.png 为滤波效果对比图。
典型结论(本实验数据):
- 椒盐噪声下中值滤波优势显著,各密度下 PSNR 均值约 42.8 dB,明显高于均值/高斯滤波(约 29 dB);
- 高斯噪声下均值与高斯滤波在 5×5 窗口内表现接近,三者差异较小。
简介:实现基于 LSB(最低有效位)的图像信息隐藏与提取算法,将文本信息嵌入载体图像且不可见性良好,提取准确率 100%。
实现要点:
- 数据格式:4 字节大端长度头 + UTF-8 消息字节流;
- 嵌入:将消息逐位写入载体图像每个字节通道的最低有效位(1 位/通道);
- 提取:按长度头读取对应 bit 流并还原,PNG 无损格式保证 100% 还原;
- 不可见性:以含密图与载体图的 PSNR 量化评估。
运行:
# 完整演示(自动生成载体图、嵌入中文消息、提取校验、输出指标)
python steganography/lsb.py demo
# 单独嵌入 / 提取
python steganography/lsb.py hide --carrier data/carrier.png \
--message "需要隐藏的文本" --output output/stego.png
python steganography/lsb.py extract --image output/stego.png结果:output/stego.png(含密图)、output/stego_diff.png(差异放大图,白色点为被修改像素)。演示输出示例:
提取结果 : 一致 = True
不可见性 PSNR: 77.84 dB(> 45 dB 表示肉眼几乎不可分辨)
提取准确率 : 100.0%(PNG 无损往返)
消息支持中英文混排;512×512 彩色图最大可嵌入约 98 KB 文本,近容量上限嵌入仍可 100% 还原。
- 视频写入失败:确保输出路径所在目录存在、无中文之外的特殊字符问题;
chroma_key.py已内置中文路径兼容(先写临时文件再改名)。 - 抠图效果不佳(真实绿幕素材):绿幕光照不均时,可调整
chroma_key.green_mask的 HSV 下界/上界参数。 - 含密图请保存为 PNG:JPEG 有损压缩会破坏 LSB,导致无法还原。