📄 opta.c
字号:
#include "stdio.h"
int image_second(unsigned char *data,int m,int n);
void binary_noise(unsigned char *data)
{
unsigned char *image_in=data;
int i,j;
unsigned char p[9];
for(i=1;i<299;i++)
{
for(j=1;j<255;j++)
{
p[1]=*(image_in+i*256+j+1)/255;
p[2]=*(image_in+(i-1)*256+j+1)/255;
p[3]=*(image_in+(i-1)*256+j)/255;
p[4]=*(image_in+(i-1)*256+j-1)/255;
p[5]=*(image_in+i*256+j-1)/255;
p[6]=*(image_in+(i+1)*256+j-1)/255;
p[7]=*(image_in+(i+1)*256+j)/255;
p[8]=*(image_in+(i+1)*256+j+1)/255;
if(*(image_in+i*256+j)==255)
{
if(!p[1]+!p[3]+!p[5]+!p[7]>=3)
// printf("!p[1]=%d\n",!p[1]);
*(image_in+i*256+j)=0;
}
if(*(image_in+i*256+j)==0)
{
if(((!p[1]+!p[2]+!p[3])*(!p[5]+!p[6]+!p[7])+(!p[3]+!p[4]+!p[5])*(!p[7]+!p[8]+!p[1]))==1)
*(image_in+i*256+j)=255;
}
}
}
}
void image_opta(unsigned char *data)
{
unsigned char *image_in=data;
int i,j,flag;
int k;
char p[9];
unsigned char *image_data,*image_temp;
if((image_temp=malloc(300*256*sizeof(unsigned char*)))==NULL) printf("error allocating");
image_data=image_temp;
for(i=300*256;i>0;i--)
{
*image_temp++=0;
}
flag=1;
while(flag==1)
{
flag=0;
for(i=2;i<298;i++)
{
for(j=2;j<254;j++)
{
if(*(image_in+i*256+j)==255) continue;
//a
if( (*(image_in+(i-1)*256+j-1)==255)
&&(*(image_in+(i-1)*256+j)==255)
&&(*(image_in+(i-1)*256+j+1)==255)
&&(*(image_in+i*256+j)==0)
&&(*(image_in+(i+1)*256+j-1)==0)
&&(*(image_in+(i+1)*256+j)==0)
&&(*(image_in+(i+1)*256+j+1)==0) )
{
k=image_second(image_in,i,j);
if(k==0)
{
*(image_data+i*256+j)=255;
}
flag=1;
continue;
}
//b
if((*(image_in+(i-1)*256+j-1)==255)
&&(*(image_in+(i-1)*256+j+1)==0)
&&(*(image_in+i*256+j-1)==255)
&&(*(image_in+i*256+j)==0)
&&(*(image_in+i*256+j+1)==0)
&&(*(image_in+(i+1)*256+j-1)==255)
&&(*(image_in+(i+1)*256+j+1)==0))
{
k=image_second(image_in,i,j);
if(k==0)
{
*(image_data+i*256+j)=255;
}
flag=1;
continue;
}
//c
if((*(image_in+(i-1)*256+j-1)==0)
&&(*(image_in+(i-1)*256+j)==0)
&&(*(image_in+(i-1)*256+j+1)==0)
&&(*(image_in+i*256+j)==0)
&&(*(image_in+(i+1)*256+j-1)==255)
&&(*(image_in+(i+1)*256+j)==255)
&&(*(image_in+(i+1)*256+j+1)==255))
{
k=image_second(image_in,i,j);
if(k==0)
{
*(image_data+i*256+j)=255;
}
flag=1;
continue;
}
//d
if((*(image_in+(i-1)*256+j-1)==0)
&&(*(image_in+(i-1)*256+j+1)==255)
&&(*(image_in+i*256+j-1)==0)
&&(*(image_in+i*256+j)==0)
&&(*(image_in+i*256+j+1)==255)
&&(*(image_in+(i+1)*256+j-1)==0)
&&(*(image_in+(i+1)*256+j+1)==255))
{
k=image_second(image_in,i,j);
if(k==0)
{
*(image_data+i*256+j)=255;
}
flag=1;
continue;
}
//e
if((*(image_in+(i-1)*256+j)==255)
&&(*(image_in+(i-1)*256+j+1)==255)
&&(*(image_in+i*256+j-1)==0)
&&(*(image_in+i*256+j)==0)
&&(*(image_in+i*256+j+1)==255)
&&(*(image_in+(i+1)*256+j)==0))
{
k=image_second(image_in,i,j);
if(k==0)
{
*(image_data+i*256+j)=255;
}
flag=1;
continue;
}
//f
if((*(image_in+(i-1)*256+j-1)==255)
&&(*(image_in+(i-1)*256+j)==255)
&&(*(image_in+i*256+j-1)==255)
&&(*(image_in+i*256+j)==0)
&&(*(image_in+i*256+j+1)==0)
&&(*(image_in+(i+1)*256+j)==0))
{
k=image_second(image_in,i,j);
if(k==0)
{
*(image_data+i*256+j)=255;
}
flag=1;
continue;
}
//g
if((*(image_in+(i-1)*256+j)==0)
&&(*(image_in+i*256+j-1)==255)
&&(*(image_in+i*256+j)==0)
&&(*(image_in+i*256+j+1)==0)
&&(*(image_in+(i+1)*256+j-1)==255)
&&(*(image_in+(i+1)*256+j)==255))
{
k=image_second(image_in,i,j);
if(k==0)
{
*(image_data+i*256+j)=255;
}
flag=1;
continue;
}
//h
if((*(image_in+(i-1)*256+j)==0)
&&(*(image_in+i*256+j-1)==0)
&&(*(image_in+i*256+j)==0)
&&(*(image_in+i*256+j+1)==255)
&(*(image_in+(i+1)*256+j)==255)
&&(*(image_in+(i+1)*256+j+1)==255))
{
k=image_second(image_in,i,j);
if(k==0)
{
*(image_data+i*256+j)=255;
}
flag=1;
continue;
}
}
}
for(i=2;i<298;i++)
{
for(j=2;j<254;j++)
{
if(*(image_data+i*256+j)==255)
*(image_in+i*256+j)=255;
}
}
}
}
int image_second(unsigned char *data,int m,int n)
{
unsigned char *image_temp=data;
int k=0;
//a
if( (*(image_temp+(m-1)*256+n)==0)
&&(*(image_temp+(m-1)*256+n+2)==255)
&&(*(image_temp+m*256+n-1)==255)
&&(*(image_temp+m*256+n)==0)
&&(*(image_temp+m*256+n+1)==0)
&&(*(image_temp+m*256+n+2)==255)
&&(*(image_temp+(m+1)*256+n)==0)
&&(*(image_temp+(m+1)*256+n+2)==255) )
{
k=1;
}
//b
if( (*(image_temp+(m-1)*256+n+1)==255)
&&(*(image_temp+(m-1)*256+n+2)==255)
&&(*(image_temp+m*256+n-1)==255)
&&(*(image_temp+m*256+n)==0)
&&(*(image_temp+m*256+n+1)==0)
&&(*(image_temp+m*256+n+2)==255)
&&(*(image_temp+(m+1)*256+n)==0)
&&(*(image_temp+(m+1)*256+n+1)==0) )
{
k=1;
}
//c
if( (*(image_temp+(m-1)*256+n)==0)
&&(*(image_temp+(m-1)*256+n+1)==0)
&&(*(image_temp+m*256+n-1)==255)
&&(*(image_temp+m*256+n)==0)
&&(*(image_temp+m*256+n+1)==0)
&&(*(image_temp+m*256+n+2)==255)
&&(*(image_temp+(m+1)*256+n+1)==255)
&&(*(image_temp+(m+1)*256+n+2)==255) )
{
k=1;
}
//d
if( (*(image_temp+(m-1)*256+n)==255)
&&(*(image_temp+m*256+n-1)==0)
&&(*(image_temp+m*256+n)==0)
&&(*(image_temp+m*256+n+1)==0)
&&(*(image_temp+(m+1)*256+n)==0)
&&(*(image_temp+(m+2)*256+n-1)==255)
&&(*(image_temp+(m+2)*256+n)==255)
&&(*(image_temp+(m+2)*256+n+1)==255) )
{
k=1;
}
//e
if( (*(image_temp+(m-1)*256+n)==255)
&&(*(image_temp+m*256+n)==0)
&&(*(image_temp+(m+1)*256+n-1)==0)
&&(*(image_temp+(m+1)*256+n)==0)
&&(*(image_temp+(m+1)*256+n+1)==255)
&&(*(image_temp+(m+2)*256+n)==255)
&&(*(image_temp+(m+2)*256+n+1)==255) )
{
k=1;
}
//f
if( (*(image_temp+(m-1)*256+n)==255)
&&(*(image_temp+m*256+n)==0)
&&(*(image_temp+(m+1)*256+n-1)==255)
&&(*(image_temp+(m+1)*256+n)==0)
&&(*(image_temp+(m+1)*256+n+1)==0)
&&(*(image_temp+(m+2)*256+n-1)==255)
&&(*(image_temp+(m+2)*256+n)==255) )
{
k=1;
}
//g
if( (*(image_temp+(m-1)*256+n-1)==255)
&&(*(image_temp+(m-1)*256+n)==255)
&&(*(image_temp+(m-1)*256+n+1)==0)
&&(*(image_temp+m*256+n-1)==255)
&&(*(image_temp+m*256+n)==0)
&&(*(image_temp+m*256+n+1)==0)
&&(*(image_temp+m*256+n+2)==255)
&&(*(image_temp+(m+1)*256+n)==0)
&&(*(image_temp+(m+1)*256+n+1)==255)
&&(*(image_temp+(m+1)*256+n+2)==255) )
{
k=1;
}
//h
if( (*(image_temp+(m-1)*256+n-1)==0)
&&(*(image_temp+(m-1)*256+n)==255)
&&(*(image_temp+m*256+n-1)==0)
&&(*(image_temp+m*256+n)==0)
&&(*(image_temp+m*256+n+1)==255)
&&(*(image_temp+(m+1)*256+n-1)==255)
&&(*(image_temp+(m+1)*256+n)==0)
&&(*(image_temp+(m+1)*256+n+1)==0) )
{
k=1;
}
//i
if( (*(image_temp+(m-1)*256+n)==0)
&&(*(image_temp+(m-1)*256+n+1)==255)
&&(*(image_temp+(m-1)*256+n+2)==255)
&&(*(image_temp+m*256+n-1)==255)
&&(*(image_temp+m*256+n)==0)
&&(*(image_temp+m*256+n+1)==0)
&&(*(image_temp+m*256+n+2)==255)
&&(*(image_temp+(m+1)*256+n)==255)
&&(*(image_temp+(m+1)*256+n+1)==0)
&&(*(image_temp+(m+1)*256+n+2)==255) )
{
k=1;
}
return(k);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -