C图片处理

1.RGB转素描 
#include<stdio.h> 
#include<stdlib.h> 
#include<string.h> 
#include<math.h> 
int temp_ex(int **save,int *temp,int tw,int x,int y) 

int i,j; 
int m=0,px,py,t; 
for(i=0;i<tw;i++) 
for(j=0;j<tw;j++) 

py=y-tw/2+i; 
px=x-tw/2+j; 
t=(save[px][py*3]+save[px][py*3+1]+save[px][py*3+2])/3; 
m=m+t*temp[i*tw+j]; 

return m; 

void sumiao(FILE *fp1,int **save) 


FILE *fp2; 
char outfile[20]; 
int i,j,a,a1,a2,a3; 
int **save1,**save2; 
save1=(int **)malloc(height*sizeof(int*)); 
for(i=0;i<height;i++) 
save1[i]=(int *)malloc(width*3*sizeof(int));  //保存图像信息,便于操作 
save2=(int **)malloc(height*sizeof(int*)); 
for(i=0;i<height;i++) 
save2[i]=(int *)malloc(width*3*sizeof(int));  //保存图像信息,便于操作 
int temp[9]={1,1,1,1,-8,1,1,1,1}; 
int temp1[9]={1,1,-1,1,0,-1,1,-1,-1}; 
int temp2[9]={1,1,1,-1,0,1,-1,-1,-1}; 
int temp3[9]={1,1,1,1,4,1,1,1,1}; 
    printf("输入转换后的bmp文件的文件名:"); 
    scanf("%s",outfile); 
    if((fp2=fopen(outfile,"wb+"))==NULL) 

printf("cannot open outfile"); 
   exit(0); 

fseek(fp1,0L,0); 
    for(i=0;i<54;i++) 
fputc(fgetc(fp1),fp2);  //文件头部 
for(i=0;i<height;i++) 

for(j=0;j<width*3;j++) 

save[i][j]=fgetc(fp1); 
save1[i][j]=save[i][j]; 
save2[i][j]=save[i][j]; 

for(j=0;j<extra;j++) 
fgetc(fp1); 

for(i=1;i<height-1;i++) 
for(j=1;j<width-1;j++) 
{  //拉普拉斯卷积运算 
a=temp_ex(save,temp,3,i,j); 
a1=fabs(temp_ex(save,temp1,3,i,j));  //杂点检测 
a2=fabs(temp_ex(save,temp2,3,i,j)); 
a3=fmax(a1,a2); 
if(a3<25) a=0; 
else 

a=(int)(a*2);  
if(a>255) a=255; 
else if(a<32) a=0; 

a=255-a;  //反色处理 
save1[i][j*3]=a;save1[i][j*3+1]=a;save1[i][j*3+2]=a; 
}
for(i=1;i<height-1;i++)  //模糊处理 
for(j=1;j<width-1;j++) 

a=temp_ex(save1,temp3,3,i,j)/12; 
save2[i][j*3]=a;save2[i][j*3+1]=a;save2[i][j*3+2]=a; 

fseek(fp2,54L,0); 
for(i=0;i<height;i++) 

for(j=0;j<width*3;j++) 
   fputc(save2[i][j],fp2); 
for(j=0;j<extra;j++) 
fputc(0,fp2); 


for(i=0;i<height-1;i++) 

free(save1[i]); 
free(save2[i]); 

fclose(fp2); 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值