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

📄 cpp2.cpp

📁 图像插值程序
💻 CPP
字号:
#include<stdio.h>

main()
{
	int i=0,j=0,white=255,i0,j0,w,h;
	float fw,fh,i1,j1,t1,t2;
	
	unsigned int a[256][256],value1,value2,value3;
	FILE *cp;
	printf("---------------------------高次插值缩放-------------------------------\n");
	printf("请输入要求的高度和宽度:\n");
	printf("height=");
	scanf("%d",&h);
	printf("\nwidth=");
	scanf("%d",&w);                                //输入想要得到的新图形的宽度w和高度h

	
	if((cp=fopen("lena.raw","rb"))==NULL)
		printf("file can not be opened.");
	else{
		
		for(i=0;i<=255;i++){
			for(j=0;j<=255;j++){
			fread(&a[i][j],1,1,cp);
			}
		}
		fclose(cp);                                   //读取并存储原图像
	}
	

	
	fw=(float)w/256;
	fh=(float)h/256;

	if((cp=fopen("gaoci.raw","wb"))==NULL)
		printf("can not open.");
	else{
		for(i=0;i<h;i++)
		{
			for(j=0;j<w;j++)
			{
				
				j1=(float)j/fw;
				j0=(int)j1;
				t1=j1-(float)j0;
				i1=(float)i/fh;
				i0=(int)i1;
				t2=i1-(float)i0;
				
				if((j0<0)||(j0>=256)||(i0<0)||(i0>=256))
				{
					fwrite(&white,1,1,cp);
				}				
				else{
					if(j0>=1&&j0<=254)                   //x方向进行高次插值得到x方向的值value2
						value2=a[i0][j0-1]*t1*(t1-1)/2+a[i0][j0]*(t1+1)*(1-t1)+a[i0][j0+1]*(t1+1)*t1/2;
					else
						value2=a[i0][j0];
					if(i0>=1&&i0<=254)              	//y方向进行高次插值得到y方向的值value3
						value3=a[i0-1][j0]*t2*(t2-1)/2+a[i0][j0]*(t2+1)*(1-t2)+a[i0+1][j0]*(t2+1)*t2/2;
					else
						value3=a[i0][j0];
					if(t1+t2!=0)
						
						value1=value2*(t2/(t1+t2))+value3*(t1/(t1+t2));
					else
						value1=(value2+value3)/2;
					fwrite(&value1,1,1,cp);
				}
			}
		}
		fclose(cp);
	}

	printf("\n文件已输出至gaoci.raw\n");
	return ;

}

⌨️ 快捷键说明

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