注:本帖不对CCS软件安装、DSP工程建立及相关配置介绍。
上篇就如何掩藏信息作以介绍,本篇将对掩藏的信息提取做说明。
做隐藏时候,我们是将信息嵌入到最不重要位LSB上,当然其他位也可以,但是越接近最重要位的隐藏,人眼是很容易察觉的,对图片毁损比较大;我们采取LSB清0,填值,提取也就相似,取得的数据与2除,余数为1,那么嵌入数据就为1,反之就为0。编写的L***Get函数如下:
- void L***Get(bmp *m, int *goaltext)
- {
- int i, j;
- int bmpWidth; // 图像的宽
- int bmpHeight; // 图像的高
- int biBitCount; // 图像类型,每像素位数
- int lineByte;
- int temp;
- // 获取图像宽、高、每像素所占位数等信息
- bmpWidth = m->info.biWidth;
- bmpHeight = m->info.biHeight;
- biBitCount = m->info.biBitcount;
- // 定义变量,计算图像每行像素所占的字节数(必须是4的倍数)
- lineByte=(bmpWidth * biBitCount / 8 + 3) / 4 * 4;
- int t = 0;
- int p = 112;
- for(i = 0; i < bmpHeight; i++)
- {
- for(j = 0; j < bmpWidth; j++)
- {
- temp = (*(unsigned char *)(m->imgBuf + i * lineByte + j));
- int maxlen = i*bmpWidth +j;
- if(p>= maxlen )
- {
- goaltext[t] = temp & 1;
- t ++;
- }
- else
- return;
- }
- }
- }
复制代码
与嵌入数据
- const int text[] = {
- 1,1,1,0,1,0,0,
- 1,1,1,0,0,1,0,
- 1,1,1,1,0,0,1,
- 0,1,0,1,1,1,0,
- 1,1,0,0,1,0,1,
- 1,1,0,1,1,0,0,
- 1,1,0,0,1,0,1,
- 1,1,0,0,0,1,1,
- 1,1,0,0,1,1,0,
- 1,1,0,0,0,0,1,
- 1,1,0,1,1,1,0,
- 1,1,1,0,0,1,1,
- 0,1,0,1,1,1,0,
- 1,1,0,0,0,1,1,
- 1,1,0,1,1,1,1,
- 1,1,0,1,1,0,1,
- };
复制代码
比较,完全吻合。
|