⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 test.cpp

📁 数字水印的E_BLIND/D_LC的源代码
💻 CPP
字号:
#include "stdio.h"
#include "iostream.h"
#include "stdlib.h"
//函数声明
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 <<"经检测,图象中没有嵌入水印!"<<endl;
	    else
		    cout <<"经检测,图象中有嵌入了水印!"<<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;
}
		



	
	

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -