数字图像盲水印技术_java高级面试题及答案整理

Java (2) 2024-07-11 15:12

Hi,大家好,我是编程小6,很荣幸遇见你,我把这些年在开发过程中遇到的问题或想法写出来,今天说一说
数字图像盲水印技术_java高级面试题及答案整理,希望能够帮助你!!!。

早期大约是10年前从一本数字图像处理上看到过数字水印的概念,觉得确实一种很有意思的东西,那个时候主要就是基于LSB的图像信息的隐藏,这种在空域里的方法有较大的缺陷,鲁棒性是比较差的。随便一个后期的都会造成水印的丢失,因此,虽然是一种盲水印,但是不具有很好的推广性。

前段时间一个朋友给了我一段使用Opencv的盲水印代码,是基于FFT变换的, 抽空看了下,对其中部分的实现过程进行了替换和分解,也实现了一个最简单的基于频域的盲水印效果。

我在寻找相关资料的时候在网络上看到有几个这方面的文章和工具,现在分享如下:

好像还有一个写的比较详细,而且有工具,在github上也有分享代码。

但是似乎这些工具大部分只支持文字水印,而不支持图像水印,文字我不熟悉,因此我还是用图像做水印模板,核心的代码如下所示:

int IM_AddBlindWaterMark(unsigned char *Src, unsigned char *WaterMark, unsigned char *Dest, int Width, int Height, int Stride, int WidthW, int HeightW, intStrideW)

{int Channel = Stride / Width, ChannelW = StrideW /WidthW;if ((Src == NULL) || (Dest == NULL)) returnIM_STATUS_NULLREFRENCE;if ((Width <= 0) || (Height <= 0)) returnIM_STATUS_INVALIDPARAMETER;if ((Channel != 1) && (Channel != 3) && (Channel != 4)) returnIM_STATUS_INVALIDPARAMETER;if ((ChannelW != 1) && (ChannelW != 3) && (ChannelW != 4)) returnIM_STATUS_INVALIDPARAMETER;if ((WidthW >= Width / 4) || (HeightW >= Height / 4)) return IM_STATUS_INVALIDPARAMETER; //水印图不能大于原图尺寸的一半

int Status =IM_STATUS_OK;int OptimalW = IM_GetOptimalDftSize(Width), OptimalH =IM_GetOptimalDftSize(Height);int OffsetX = (OptimalW - Width) / 2, OffsetY = (OptimalH - Height) / 2;int HalfW = OptimalW / 2, HalfH = OptimalH / 2;if (Channel == 1)

{

Complex*Data = (Complex *)malloc(OptimalW * OptimalH * sizeof(Complex));if ((Data == NULL)) returnIM_STATUS_OUTOFMEMORY;for (int Y = 0; Y < Height; Y++) //我们把数据居

今天的分享到此就结束了,感谢您的阅读,如果确实帮到您,您可以动动手指转发给其他人。

下一篇

已是最新文章

发表回复