?? test.cpp
字號:
#include "stdio.h"
#include "iostream.h"
#include "stdlib.h"
//函數(shù)聲明
unsigned char* ProdRandTem(FILE* f1);
unsigned char* WaterMarking(unsigned char* array1);
void SaveFile(unsigned char* arr);
void LoadFile();
void LoadWaterFile();
void CheckWater(unsigned char* arr1);
int CheckResult(unsigned char z);
//全局變量聲明
unsigned char* array=new unsigned char [256*256];
unsigned char* CTarray=new unsigned char [256*256];
unsigned char Zlc;
FILE* f1;
FILE* f2;
unsigned char a[54];
void main()
{
unsigned char *array1,*array2;
int choice,result;
cout <<"請輸入choice的值(1表示給Lean圖象嵌入水印,2表示從嵌入水印的圖象中提取水印):";
cin >>choice;
switch(choice)
{
case 1:
LoadFile();
array1=ProdRandTem(f1);
array2=WaterMarking(array1);
SaveFile(array2);
break;
case 2:
LoadWaterFile();
CheckWater(array);
result=CheckResult(Zlc);
if(result==0)
cout <<"經(jīng)檢測,圖象中沒有嵌入水印!"<<endl;
else
cout <<"經(jīng)檢測,圖象中有嵌入了水印!"<<endl;
break;
}
fclose(f1);
fclose(f2);
}
unsigned char* ProdRandTem(FILE* f1)
{
FILE* f3;
unsigned char* Tarray=new unsigned char [256*256];
unsigned char* m=new unsigned char[256*256];
for(int i=0;i<256*256;i++)
{
Tarray[i]=rand()%256;
CTarray[i]=Tarray[i];
m[i]=rand()%2;
if(m[i]==1)
Tarray[i]=Tarray[i];
else
Tarray[i]=-Tarray[i];
}
if((f3=fopen("Tem.bmp","wb+"))==NULL)
{
cout <<"can't open the file!"<<endl;
return NULL;
}
fwrite(a,sizeof(unsigned char),54,f3);
fwrite(Tarray,sizeof(unsigned char),256*256,f3);
while(!feof(f1))
{
unsigned char ch;
fread(&ch,sizeof(unsigned char),1,f1);
fwrite(&ch,sizeof(unsigned char),1,f3);
}
delete [] m;
return Tarray;
}
unsigned char* WaterMarking(unsigned char* array1)
{
for(int i=0;i<256*256;i++)
{
array1[i]=0.01 * array1[i];
array[i]=array[i]+array1[i];
}
return array;
}
void SaveFile(unsigned char* arr)
{
if((f2=fopen("out0.01.bmp","wb+"))==NULL)
{
cout <<"can't open the file!"<<endl;
return;
}
fwrite(a,sizeof(unsigned char),54,f2);
fwrite(arr,sizeof(unsigned char),256*256,f2);
fseek(f1,54+256*256,SEEK_SET);
while(!feof(f1))
{
unsigned char ch;
fread(&ch,sizeof(unsigned char),1,f1);
fwrite(&ch,sizeof(unsigned char),1,f2);
}
}
void LoadFile()
{
if((f1=fopen("Lena.bmp","rb+"))==NULL)
{
cout <<"can't open the file!"<<endl;
return;
}
fread(a,sizeof(unsigned char),54,f1);
fread(array,sizeof(unsigned char),256*256,f1);
}
void LoadWaterFile()
{
char ch[20];
cout <<"請輸入提取水印圖象的名稱:";
cin >>ch;
if((f1=fopen(ch,"rb+"))==NULL)
{
cout <<"can't open the file!"<<endl;
return;
}
fread(a,sizeof(unsigned char),54,f1);
fread(array,sizeof(unsigned char),256*256,f1);
}
void CheckWater(unsigned char* arr1)
{
unsigned char sum=0;
for(int i=0;i<256*256;i++)
{
arr1[i]=arr1[i]*CTarray[i];
sum+=arr1[i];
}
Zlc=sum/(256*256);
}
int CheckResult(unsigned char z)
{
if(z>0.7)
return 1;
if(z<-0.7)
return -1;
return 0;
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -