Masuit.Tools.DigtalWatermarker
2026.1.2
dotnet add package Masuit.Tools.DigtalWatermarker --version 2026.1.2
NuGet\Install-Package Masuit.Tools.DigtalWatermarker -Version 2026.1.2
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="Masuit.Tools.DigtalWatermarker" Version="2026.1.2" />
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="Masuit.Tools.DigtalWatermarker" Version="2026.1.2" />
<PackageReference Include="Masuit.Tools.DigtalWatermarker" />
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add Masuit.Tools.DigtalWatermarker --version 2026.1.2
The NuGet Team does not provide support for this client. Please contact its maintainers for support.
#r "nuget: Masuit.Tools.DigtalWatermarker, 2026.1.2"
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package Masuit.Tools.DigtalWatermarker@2026.1.2
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=Masuit.Tools.DigtalWatermarker&version=2026.1.2
#tool nuget:?package=Masuit.Tools.DigtalWatermarker&version=2026.1.2
The NuGet Team does not provide support for this client. Please contact its maintainers for support.
Masuit.Tools.DigitalWatermarker
简介
Masuit.Tools.DigitalWatermarker 是一个基于 OpenCV 的数字水印库,提供鲁棒的图像数字水印嵌入和提取功能。该库采用 DCT(离散余弦变换)和 QIM(量化索引调制)技术,可以在图像中嵌入不可见的数字水印,用于版权保护和内容追溯。
特性
- 不可见水印:水印嵌入在图像的频域中,肉眼不可见
- 鲁棒性强:对图像压缩、裁剪、翻转、翻录等攻击具有较强的抵抗能力
- 自适应强度:根据图像块的能量自适应调整嵌入强度
- 简单易用:提供简洁的 API,支持文件路径、流等多种输入方式
- 高性能:基于 OpenCV 实现,处理速度快
技术原理
该库采用以下关键技术:
- DCT变换:在 8×8 像素块上进行离散余弦变换
- 中频嵌入:选择中频系数位置 (2,3) 和 (3,2) 进行水印嵌入
- QIM调制:使用量化索引调制技术,提高抗压缩能力
- YCrCb色彩空间:仅在亮度通道嵌入,最大化视觉不可感知性
- 自适应阈值:根据图像块的 DCT 能量自适应调整嵌入强度
安装
通过 NuGet 安装:
Install-Package Masuit.Tools.DigitalWatermarker
Install-Package OpenCvSharp4.runtime.win
或者使用 .NET CLI:
dotnet add package Masuit.Tools.DigitalWatermarker
dotnet add package OpenCvSharp4.runtime.win
使用方法
基本用法
using Masuit.Tools.DigtalWatermarker;
using OpenCvSharp;
// 从文件嵌入水印
Mat watermarkedImage = DigitalWatermarker.EmbedWatermark("source.jpg", "watermark.png");
Cv2.ImWrite("watermarked.jpg", watermarkedImage);
// 提取水印
Mat extractedWatermark = DigitalWatermarker.ExtractWatermark("watermarked.jpg");
Cv2.ImWrite("extracted_watermark.png", extractedWatermark);
使用 Mat 对象
using var source = Cv2.ImRead("source.jpg");
using var watermark = Cv2.ImRead("watermark.png");
// 嵌入水印
using var watermarked = DigitalWatermarker.EmbedWatermark(source, watermark);
Cv2.ImWrite("result.jpg", watermarked);
// 提取水印
using var extracted = DigitalWatermarker.ExtractWatermark(watermarked);
Cv2.ImWrite("extracted.png", extracted);
使用流
using var sourceStream = File.OpenRead("source.jpg");
using var watermarkStream = File.OpenRead("watermark.png");
// 嵌入水印
using var watermarked = DigitalWatermarker.EmbedWatermark(sourceStream, watermarkStream);
Cv2.ImWrite("result.jpg", watermarked);
// 从流提取水印
using var imageStream = File.OpenRead("watermarked.jpg");
using var extracted = DigitalWatermarker.ExtractWatermark(imageStream);
Cv2.ImWrite("extracted.png", extracted);
最佳实践
水印图像要求
- 尺寸建议:水印图像会被自动缩放到适合的尺寸(基于 8×8 块网格)
- 内容建议:使用高对比度的黑白图像作为水印,效果更佳
- 格式支持:支持所有 OpenCV 支持的图像格式
使用建议
- 源图像质量:建议使用高质量的源图像,避免过度压缩
- 水印提取:提取的水印可能包含噪声,可以进行后处理优化
- 鲁棒性测试:建议对嵌入水印的图像进行各种攻击测试,验证水印的鲁棒性
性能优化
- 图像尺寸:处理时间与图像尺寸成正比,大图像需要更多处理时间
- 内存管理:及时释放 Mat 对象以避免内存泄漏
- 批量处理:如需处理大量图像,建议进行并行处理
应用场景
版权保护
// 为摄影作品添加版权水印
var photographer = "© 2024 Photographer Name";
var logo = Cv2.ImRead("logo.png");
var photo = Cv2.ImRead("photo.jpg");
using var protected_photo = DigitalWatermarker.EmbedWatermark(photo, logo);
Cv2.ImWrite("protected_photo.jpg", protected_photo);
内容溯源
// 为媒体内容添加来源标识
var sourceId = GenerateSourceIdentifier(); // 生成唯一标识图像
var content = Cv2.ImRead("content.jpg");
using var traced_content = DigitalWatermarker.EmbedWatermark(content, sourceId);
// 发布traced_content...
// 后续验证来源
using var extracted_id = DigitalWatermarker.ExtractWatermark(traced_content);
bool isAuthentic = VerifySourceIdentifier(extracted_id);
限制和注意事项
- 处理区域:只处理图像中8的倍数的区域,边缘部分可能被忽略
- 色彩空间:仅在亮度通道进行水印嵌入
- OpenCV依赖:需要安装 OpenCV 运行时
- 攻击抵抗:虽然具有一定的鲁棒性,但不能抵抗所有类型的攻击
系统要求
- .NET Standard 2.0 或更高版本
- OpenCvSharp4 (自动安装)
许可证
本项目采用 MIT 许可证。详情请参见 LICENSE 文件。
贡献
欢迎提交 Issue 和 Pull Request!
相关链接
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net5.0 was computed. net5.0-windows was computed. net6.0 was computed. net6.0-android was computed. net6.0-ios was computed. net6.0-maccatalyst was computed. net6.0-macos was computed. net6.0-tvos was computed. net6.0-windows was computed. net7.0 was computed. net7.0-android was computed. net7.0-ios was computed. net7.0-maccatalyst was computed. net7.0-macos was computed. net7.0-tvos was computed. net7.0-windows was computed. net8.0 was computed. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. net9.0 was computed. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. net10.0 was computed. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
| .NET Core | netcoreapp2.0 was computed. netcoreapp2.1 was computed. netcoreapp2.2 was computed. netcoreapp3.0 was computed. netcoreapp3.1 was computed. |
| .NET Standard | netstandard2.0 is compatible. netstandard2.1 was computed. |
| .NET Framework | net461 was computed. net462 was computed. net463 was computed. net47 was computed. net471 was computed. net472 was computed. net48 was computed. net481 was computed. |
| MonoAndroid | monoandroid was computed. |
| MonoMac | monomac was computed. |
| MonoTouch | monotouch was computed. |
| Tizen | tizen40 was computed. tizen60 was computed. |
| Xamarin.iOS | xamarinios was computed. |
| Xamarin.Mac | xamarinmac was computed. |
| Xamarin.TVOS | xamarintvos was computed. |
| Xamarin.WatchOS | xamarinwatchos was computed. |
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.
-
.NETStandard 2.0
- OpenCvSharp4 (>= 4.13.0.20260213)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
Masuit.Tools.DigtalWatermarker数字水印库