#include<stdio.h> |
|
5分 |
代码写的很乱,没有层次感,没看懂,猜测内存分配的问题,看看是不是有内存分配时候大小不够的或导致越界的,跟踪调试一下试试吧
|
我是直接复制的,放这里可能没有层次感了,这个可以直接放VC里运行的,代码不多,麻烦看下,谢谢了
|
|
10分 |
不是有个插入代码的功能呢吗
还有自定义函数的参数最好不要超过四个,一是容易弄混,二是效率不是很高,再者就是别人阅读你的代码会很不舒服的,甚至会直接不看你的代码的 |
#include<stdio.h> #include<stdlib.h> #define IMAGE_SIZE_ROW 256 #define IMAGE_SIZE_COL 256 unsigned char origin_image[IMAGE_SIZE_ROW][IMAGE_SIZE_ROW]; unsigned char result_image[IMAGE_SIZE_ROW][IMAGE_SIZE_ROW]; void FILT33(void *I_image,void *O_image,int size_x,int size_y,float eps); main(int argc,char *argv[]) { FILE *I_file,*O_file; char origin_image_file_name[80]; char result_image_file_name[80]; int i; float eps=0.5; I_file=fopen("D:\cell.tif","rb"); if(I_file==NULL) { perror("printf program error\n"); printf("error");exit(0); } for(i=0;i<IMAGE_SIZE_ROW;i++) fread(origin_image[i],sizeof(unsigned char),IMAGE_SIZE_COL,I_file); FILT33(origin_image,result_image,IMAGE_SIZE_ROW,IMAGE_SIZE_COL,eps); fclose(I_file); } void FILT33(void *I_image,void *O_image,int size_x,int size_y,float eps) // 3x3 smoothing function /*arguments: I_image --> input image pointer I_image --> output image pointer size_x,size_y --> image size in both dimensions(row,col) eps -->difference tolerence */ { int i,j,ia1,im1,ja1,jm1; float mean_value,gmax,difference; unsigned char *ptr1,*ptr2; ptr1=(unsigned char *)I_image; ptr2=(unsigned char *)O_image; for(i=0;i<size_x;i++) { printf("*"); for(j=0;j<size_y;j++) { ia1=(i+1>size_x-1)?size_x-1:i+1;//get i+1 ja1=(j+1>size_y-1)?size_y-1:j+1;//get j+1 im1=(i-1<0)?0:i-1;//get i-1 im1=(j-1<0)?0:j-1;//get j-1 //calculate 8-neibourhood mean value mean_value=ptr1[im1*size_y+jm1]+ptr1[im1*size_y+j]+ptr1[im1*size_y+ja1] +ptr1[i*size_y+jm1]+ptr1[i*size_y+ja1] +ptr1[ia1*size_y+jm1]+ptr1[ia1*size_y+j]+ptr1[ia1*size_y+ja1]; mean_value=mean_value/8; //if the difference between mean_value and f(i,j) is greater than ""eps"" //then nochange;else f(i,j) is replaced by mean_value difference=ptr1[i*size_y+j]-mean_value; difference=(difference>0)?difference:0-difference; if(difference<eps) ptr2[i*size_y+j]=mean_value+0.5; else ptr2[i*size_y+j]=ptr1[i*size_y+j]; } } } 我改过了,代码直接插入的,麻烦看下,谢谢了 |
|
没人吗,求大神指导,自己先顶一个
|
|
5分 |
自己debug一下吧,应该是内存问题导致的crash, 应该很好debug的
|
会不会是读进来的图像数据不能像matlab里那样直接看做一个矩阵来处理,fread函数读进来的图像数据是怎样的,二进制的?数据什么形式排列的?
|
|
im1=(i-1<0)?0:i-1;//get i-1
im1=(j-1<0)?0:j-1;//get j-1 应该改成以下吧 im1=(i-1<0)?0:i-1;//get i-1 jm1=(j-1<0)?0:j-1;//get j-1 不然jm1的值是不确定的。 |
|
我用你的程序运行结果全是*
|