/*提高H3_1*/ int H3_1() { //实现BitPlane保存信息 char fname[file_name_len]; struct IMG image; struct IMG * pimg=ℑ char str[str_info_len]; int bit=7;//第1比特用来当作水印信息,因为低频率人眼不敏感 //使用bit=7时,打开图片可以看到图片最上面的图片颜色信息有明显的痕迹 //lena strcpy(str,"Lena!This is the DIP course."); strcpy(fname,"lena.ppm"); ReadPPM(fname,pimg); BitPlane(pimg,str,bit); WritePPM("lena_bitplane.ppm",pimg); str[0]=0;//清空 unBitPlane(pimg,str,bit); printf("加密信息是: %s \n",str); //Parrots strcpy(str,"Parrots!This is the DIP course."); strcpy(fname,"Parrots.ppm"); ReadPPM(fname,pimg); BitPlane(pimg,str,bit); WritePPM("Parrots_bitplane.ppm",pimg); str[0]=0;//清空 unBitPlane(pimg,str,bit); printf("加密信息是: %s \n",str); return 0; }
//函数定义 int H5() { char fname[file_name_len]; struct IMG image; struct IMG * pimg=ℑ struct Template tml;//定义模版 struct Template * ptml=&tml; int * arr=NULL; char ch[1024]; char * pch=ch; //lena------------------------- strcpy(fname,"lena.ppm"); ReadPPM(fname,pimg); arr=(int *)malloc(sizeof(int)*3*3);//申请一个3*3的模版矩阵 //锐化模版 strcpy(ch,"Harpening 锐化模版导入成功"); /* 0 -1 0 * -1 5 -1 * 0 -1 0 * */ //arr[0][0]=0;arr[0][1]=-1;arr[0][2]=0; //arr[1][0]=-1;arr[1][1]=5;arr[1][2]=-1; //arr[2][0]=0;arr[2][1]=-1;arr[2][2]=0; arr[0]=0; arr[1]=-1; arr[2]=0; arr[3]=-1; arr[4]=5; arr[5]=-1; arr[6]=0; arr[7]=-1; arr[8]=0; ptml->square=arr; ptml->name=pch; ptml->x=3; ptml->y=3; ptml->max=1; Convolution(pimg,ptml); strcpy(fname,"锐化后的lena.ppm"); WritePPM(fname,pimg); WritePPM(fname,pimg); //边缘检测 FreePPM(pimg); strcpy(fname,"lena.ppm"); ReadPPM(fname,pimg); strcpy(ch,"Edge Detection边缘检测Sobel算子"); /* -1 0 1 * -2 0 2 * -1 0 1 * */ arr[0]=-1; arr[1]=0; arr[2]=1; arr[3]=-2; arr[4]=0; arr[5]=2; arr[6]=-1; arr[7]=0; arr[8]=1; ptml->square=arr; ptml->name=pch; ptml->x=3;ptml->y=3; ptml->max=4; Convolution(pimg,ptml); strcpy(fname,"边缘检测后的lena.ppm"); WritePPM(fname,pimg); free(arr); //lena-------------------------- return 0; }
int AmmCaptcha_initialize(char * font,char * dictFilename) { int retres=0; if (font==0) { retres=ReadPPM(&fontRAW,"font.ppm",0); } else { retres=ReadPPM(&fontRAW,font,0); } if (!retres) { fprintf(stderr,"Could not read font for captcha system\n"); return 0; } srand (time(NULL)); return AmmCaptcha_loadDictionary(dictFilename); }
int R2Image:: Read(const char *filename) { // Initialize everything if (pixels) { delete [] pixels; pixels = NULL; } width = height = 0; // Parse input filename extension const char *input_extension; if (!(input_extension = strrchr(filename, '.'))) { fprintf(stderr, "Input file has no extension (e.g., .jpg).\n"); return 0; } // Read file of appropriate type if (!strncmp(input_extension, ".bmp", 4)) return ReadBMP(filename); else if (!strncmp(input_extension, ".ppm", 4)) return ReadPPM(filename); else if (!strncmp(input_extension, ".pfm", 4)) return ReadPFM(filename); else if (!strncmp(input_extension, ".jpg", 4)) return ReadJPEG(filename); else if (!strncmp(input_extension, ".jpeg", 5)) return ReadJPEG(filename); else if (!strncmp(input_extension, ".tif", 4)) return ReadTIFF(filename); else if (!strncmp(input_extension, ".tiff", 5)) return ReadTIFF(filename); else if (!strncmp(input_extension, ".raw", 4)) return ReadRAW(filename); else if (!strncmp(input_extension, ".grd", 4)) return ReadGRD(filename); // Should never get here fprintf(stderr, "Unrecognized image file extension"); return 0; }
/*H3_2*/ int H3_2() { //实现二值化 char fname[file_name_len]; struct IMG image; struct IMG * pimg=ℑ //lena strcpy(fname,"lena.ppm"); ReadPPM(fname,pimg); BinaryZationPPM(pimg,2); WritePPM("lena_binaryzation.ppm",pimg); //Parrots strcpy(fname,"Parrots.ppm"); ReadPPM(fname,pimg); BinaryZationPPM(pimg,4); WritePPM("Parrots_binaryzation.ppm",pimg); return 0; }
/*作业二*/ int H2() { char fname[file_name_len]; struct IMG image; struct IMG * pimg=ℑ //lena strcpy(fname,"lena.ppm"); ReadPPM(fname,pimg); NegativePPM(pimg); strcpy(fname,"lena_m.ppm"); WritePPM(fname,pimg); //parrots strcpy(fname,"Parrots.ppm"); ReadPPM(fname,pimg); NegativePPM(pimg); strcpy(fname,"Parrots_m.ppm"); WritePPM(fname,pimg); return 0; }
int H3_3() { /*实现图片的复制,因为以前对图片的操作都是在原图片进行的操作。所以可以用这个函数进行图片的复制*/ char fname[file_name_len]; struct IMG image; struct IMG image2; struct IMG * pimg=ℑ struct IMG * pimg2=&image2; //lena strcpy(fname,"lena.ppm"); ReadPPM(fname,pimg); CopyPPM(pimg,pimg2); WritePPM("lena_copy.ppm",pimg2); //Parrots strcpy(fname,"Parrots.ppm"); ReadPPM(fname,pimg); CopyPPM(pimg,pimg2); WritePPM("Parrots_copy.ppm",pimg2); return 0; }
int createTemplateDevice(int devID,char * devName,unsigned int width,unsigned int height,unsigned int framerate) { if ( ( device[devID].templateWIDTH < width ) && ( device[devID].templateHEIGHT < height ) ) { device[devID].templateHEIGHT=height; device[devID].templateWIDTH=width; } if (devName==0) { strcpy(device[devID].readFromDir,""); } else { if (strlen(devName)==0) { strcpy(device[devID].readFromDir,""); } else { strncpy(device[devID].readFromDir,devName,MAX_DIR_PATH); } } unsigned int widthInternal; unsigned int heightInternal; char file_name_test[1024]; sprintf(file_name_test,"frames/%s/colorFrame_%u_%05u.pnm",device[devID].readFromDir,devID,0); char * tmpColor = ReadPPM(file_name_test,&widthInternal,&heightInternal); if ( (widthInternal!=width) || (heightInternal!=height) ) { fprintf(stderr,"Please note that the templateColor.pnm file has %ux%u resolution and the createTemplateDevice asked for %ux%u \n",widthInternal,heightInternal,width,height); } if (tmpColor!=0) { device[devID].templateColorFrame=tmpColor; } else { // if templateColorFrame is zero the next function behaves like a malloc device[devID].templateColorFrame= (char*) realloc(device[devID].templateColorFrame,device[devID].templateWIDTH*device[devID].templateHEIGHT*3*sizeof(char)); } sprintf(file_name_test,"frames/%s/depthFrame_%u_%05u.pnm",device[devID].readFromDir,devID,0); short * tmpDepth = ReadPPMD(file_name_test,&widthInternal,&heightInternal); if ( (widthInternal!=width) || (heightInternal!=height) ) { fprintf(stderr,"Please note that the templateColor.pnm file has %ux%u resolution and the createTemplateDevice asked for %ux%u \n",widthInternal,heightInternal,width,height); } if (tmpDepth!=0) { device[devID].templateDepthFrame=tmpDepth; } else { // if templateDepthFrame is zero the next function behaves like a malloc device[devID].templateDepthFrame= (short*) realloc(device[devID].templateDepthFrame,device[devID].templateWIDTH*device[devID].templateHEIGHT*1*sizeof(short)); } NullCalibration(device[devID].templateWIDTH,device[devID].templateHEIGHT,&device[devID].calibRGB); sprintf(file_name_test,"frames/%s/color.calib",device[devID].readFromDir); if ( ! ReadCalibration(file_name_test,&device[devID].calibRGB) ) { fprintf(stderr,"Could not read color calibration\n"); } NullCalibration(device[devID].templateWIDTH,device[devID].templateHEIGHT,&device[devID].calibDepth); sprintf(file_name_test,"frames/%s/depth.calib",device[devID].readFromDir); if ( ! ReadCalibration(file_name_test,&device[devID].calibDepth) ) { fprintf(stderr,"Could not read depth calibration\n"); } return ((device[devID].templateColorFrame!=0)&&(device[devID].templateDepthFrame!=0)); }
void main(int argc, char **argv) { if ( ! ReadPPM(stdin) ) { fprintf(stderr, "Error reading PPM input file!!!\n"); exit(1); } PPMtoYUV(); WriteYUV(stdout); }
int snapTemplateFrames(int devID) { //TODO HERE MAYBE LOAD NEW BUFFERS int found_frames = 0; unsigned int widthInternal=0; unsigned int heightInternal=0; char * file_name_test = (char* ) malloc(2048 * sizeof(char)); if (file_name_test==0) { fprintf(stderr,"Could not snap frame , no space for string\n"); return 0; } sprintf(file_name_test,"frames/%s/colorFrame_%u_%05u.pnm",device[devID].readFromDir,devID,device[devID].cycle); //fprintf(stderr,"Snap color %s",file_name_test); if (FileExists(file_name_test)) { if (device[devID].templateColorFrame!=0) { free(device[devID].templateColorFrame); } device[devID].templateColorFrame = ReadPPM(file_name_test,&widthInternal,&heightInternal); ++found_frames; } sprintf(file_name_test,"frames/%s/depthFrame_%u_%05u.pnm",device[devID].readFromDir,devID,device[devID].cycle); //fprintf(stderr,"Snap depth %s",file_name_test); if (FileExists(file_name_test)) { if (device[devID].templateDepthFrame!=0) { free(device[devID].templateDepthFrame); } device[devID].templateDepthFrame = ReadPPMD(file_name_test,&widthInternal,&heightInternal); ++found_frames; } free(file_name_test); file_name_test=0; ++device[devID].cycle; if ( device[devID].safeGUARD != SAFEGUARD_VALUE ) { fprintf(stderr,"\n\n\n\nERROR , memory corruption \n\n\n\n"); } if (device[devID].cycle>65534) { device[devID].cycle=0; } if (found_frames==0) { fprintf(stderr,"Could not find any frames , we finished stream \n"); device[devID].cycle = 0; } else if (found_frames!=2) { fprintf(stderr,"\n Warning: Did not find both frames\n"); } return 1; }
int H4() { char fname[file_name_len]; struct IMG image; struct IMG * pimg=ℑ //lena strcpy(fname,"lena.ppm"); ReadPPM(fname,pimg); int * hist; hist=(int *)malloc(sizeof(int)*(pimg->maxv+1)*((pimg->channel-5)*2+1)); HistPPM(hist,pimg); strcpy(fname,"lena_hist"); WriteHist(hist,fname,pimg); //直方图完成 //均衡化处理 HistEqualization(pimg,hist); strcpy(fname,"lena_hist_equalization.ppm"); WritePPM(fname,pimg); strcpy(fname,"lena_hist_equalization"); WriteHist(hist,fname,pimg); free(hist); return 0; }
/*作业三*/ int H3() { char fname[file_name_len]; struct IMG image; struct IMG * pimg=ℑ // hint // lena int * hist=NULL; int * array=NULL; strcpy(fname,"lena.ppm"); ReadPPM(fname,pimg); hist=(int *)calloc(sizeof(int),(pimg->maxv+1)*((pimg->channel-5)*2+1));//hist[] color:3*pimg->maxv if(hist==NULL) { printf("分配内存失败!\n"); exit(-1); } printf("calloc=%d\n",sizeof(int)*(pimg->maxv+1)*((pimg->channel-5)*2+1)); HistPPM(hist,pimg); strcpy(fname,"lena"); WriteHist(hist,fname,pimg); //Parrots strcpy(fname,"Parrots.ppm"); ReadPPM(fname,pimg); hist=(int *)calloc(sizeof(int),(pimg->maxv+1)*((pimg->channel-5)*2+1));//Hist[] color:3*pimg->maxv if(hist==NULL) { printf("分配内存失败!\n"); exit(-1); } HistPPM(hist,pimg); strcpy(fname,"Parrots"); WriteHist(hist,fname,pimg); //计算分量图 strcpy(fname,"Parrots.ppm"); ReadPPM(fname,pimg); strcpy(fname,"Parrots"); ComponentPPM(fname,pimg); free(hist); //计算映射函数 //lena strcpy(fname,"lena.ppm"); ReadPPM(fname,pimg); array=(int *)calloc(sizeof(int),(pimg->maxv+1)*((pimg->channel-5)*2+1));//Hist[] color:3*pimg->maxv Square_MapPPM(array,pimg->maxv); MapPPM(array,pimg); strcpy(fname,"lena_square.ppm"); WritePPM(fname,pimg); Sqrt_MapPPM(array,pimg->maxv); MapPPM(array,pimg); strcpy(fname,"lena_sqrt.ppm"); WritePPM(fname,pimg); //Parrots strcpy(fname,"Parrots.ppm"); ReadPPM(fname,pimg); array=(int *)calloc(sizeof(int),(pimg->maxv+1)*((pimg->channel-5)*2+1));//Hist[] color:3*pimg->maxv Square_MapPPM(array,pimg->maxv); MapPPM(array,pimg); strcpy(fname,"Parrots_square.ppm"); WritePPM(fname,pimg); Sqrt_MapPPM(array,pimg->maxv); MapPPM(array,pimg); strcpy(fname,"Parrots_sqrt.ppm"); WritePPM(fname,pimg); free(array); return 0; }
int ReadSwappedPPM(char * filename,struct Image * pic,char read_only_header) { ReadPPM(filename,pic,read_only_header); swapDepthEndianness(pic); return (pic->pixels!=0); }
void myInitData(int *argc, char **argv) { int i; char s[1024]; InteractionMode = MY_MENU_CAMERA; TX = 1.1; TY = 0.8; TZ = -2.0; XmouseDown = -1; YmouseDown = -1; XmouseCurrent = XmousePrev = -1; YmouseCurrent = YmousePrev = -1; DX = DY = 0; KeybModifiers = 0; ReadOFF("cube.off", &checker); ReadPPM("snake.ppm", &TMap1); /* initialize texturing */ TextureOn = GL_TRUE; /* read texture from PPM file - printout command line arguments for debugging */ fprintf(stderr,"argc = %d: ",*argc); for (i = 0; i< *argc; i++) fprintf(stderr, " arg[%d] = %s, ",i, argv[i]); fprintf(stderr,"\n"); i = -1; if( *argc == 1){ printf("Reading in %s.\n", s ); ReadOFF("dodec1.off", &object); printf("Using default texture .\n"); //i = ReadPPM("temp1.ppm", &TMap); i = -1; } if (*argc == 3) { /* load image from URL specified on command line */ printf("Reading in %s.\n", argv[1]); ReadOFF(argv[1], &object); sprintf(s,"./getppm.pl %s > temp.ppm", argv[2]); printf("Executing:\n %s\n", s); system(s); i = ReadPPM("temp.ppm", &TMap); //i = ReadPPM(argv[2], &TMap); } else if (*argc == 2) { /* load image from default URL */ printf("Reading in %s.\n", argv[1]); ReadOFF(argv[1], &object); printf("Using default texture file 'fermat_raw.ppm'.\n"); //system("./getppm.pl http://www.cs.indiana.edu/~mitja/Delo/B581/fermat_raw.ppm > temp.ppm"); //i = ReadPPM("temp1.ppm", &TMap); i =-1; } if (i > 0) { printf("Using texture from file.\n"); /* image file is valid: use it as texture */ glPixelStorei(GL_UNPACK_ALIGNMENT, 1); glGenTextures(1, &TextureName); glBindTexture(GL_TEXTURE_2D, TextureName); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, TMap.texc, TMap.texr, 0, GL_RGB, GL_UNSIGNED_BYTE, TMap.texture); } else { printf("Using checkers texture.\n"); /* image file is invalid: use checkers */ myInitCheckers(); glPixelStorei(GL_UNPACK_ALIGNMENT, 1); glGenTextures(1, &TextureName); glBindTexture(GL_TEXTURE_2D, TextureName); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, MY_CHECKERS_WIDTH, MY_CHECKERS_HEIGHT, 0, GL_RGB, GL_UNSIGNED_BYTE, CheckersImg); } } /* myInitData() */
void InitMirror() { int* mode = new int; FloorTexPattern = ReadPPM("./textures/squareWhiteTiles.ppm",mode,&texwidth,&texheight); glGenTextures(1,&textureID); glBindTexture(GL_TEXTURE_2D,textureID); glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_S,GL_REPEAT); glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_T,GL_REPEAT); glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_NEAREST); glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_NEAREST); glTexImage2D(GL_TEXTURE_2D,0,GL_RGB,texwidth,texheight,0,GL_RGB,GL_UNSIGNED_BYTE,FloorTexPattern); PathList path("./shaders/reflectShaders/"); FloorProg = new GLSLProgram(true,&path); FloorProg->SetFragmentShader("FloorFrag.glsl"); FloorProg->SetVertexShader("FloorVert.glsl"); FloorProg->ReloadShaders(); ReflectImageProg = new GLSLProgram(true,&path); ReflectImageProg->SetFragmentShader("ReflectFrag.glsl"); ReflectImageProg->ReloadShaders(); //Center of mirror is at (0,0,-5.9) //Normal vector is (0,0,1) reflectmatrix[0]=1; reflectmatrix[1]=0; reflectmatrix[2]=0; reflectmatrix[3]=0; reflectmatrix[4]=0; reflectmatrix[5]=1; reflectmatrix[6]=0; reflectmatrix[7]=0; reflectmatrix[8]=0; reflectmatrix[9]=0; reflectmatrix[10]=-1; reflectmatrix[11]=0; reflectmatrix[12]=0; reflectmatrix[13]=0; reflectmatrix[14]=-11.8; reflectmatrix[15]=1; //Center of mirror is at (0,0,5.9) //Normal vector is (0,0,-1) reflectmatrix2[0]=1; reflectmatrix2[1]=0; reflectmatrix2[2]=0; reflectmatrix2[3]=0; reflectmatrix2[4]=0; reflectmatrix2[5]=1; reflectmatrix2[6]=0; reflectmatrix2[7]=0; reflectmatrix2[8]=0; reflectmatrix2[9]=0; reflectmatrix2[10]=-1; reflectmatrix2[11]=0; reflectmatrix2[12]=0; reflectmatrix2[13]=0; reflectmatrix2[14]=11.8; reflectmatrix2[15]=1; //Center of floor is at (0,-2,0) //Normal vector is (0,1,0) reflectmatrixF[0]=1; reflectmatrixF[1]=0; reflectmatrixF[2]=0; reflectmatrixF[3]=0; reflectmatrixF[4]=0; reflectmatrixF[5]=-1; reflectmatrixF[6]=0; reflectmatrixF[7]=0; reflectmatrixF[8]=0; reflectmatrixF[9]=0; reflectmatrixF[10]=1; reflectmatrixF[11]=0; reflectmatrixF[12]=0; reflectmatrixF[13]=-4; reflectmatrixF[14]=0; reflectmatrixF[15]=1; floorplane[0]=0; floorplane[1]=1; floorplane[2]=0; floorplane[3]=2; glClipPlane(GL_CLIP_PLANE0,floorplane); mirror1plane[0]=0; mirror1plane[1]=0; mirror1plane[2]=1; mirror1plane[3]=5.9; glClipPlane(GL_CLIP_PLANE1,mirror1plane); mirror2plane[0]=0; mirror2plane[1]=0; mirror2plane[2]=1; mirror2plane[3]=-5.9; glClipPlane(GL_CLIP_PLANE2,mirror2plane); //Load Model for Mirror MirrorhemModel = new HalfEdgeModel( "./models/dragon_250k.hem", TYPE_HEM_FILE ); if (!MirrorhemModel->IsValid()) printf( "dragon_250k.hem not loaded!\n" ); GLuint dispID = MirrorhemModel->CreateOpenGLDisplayList(USE_TRIANGLES | WITH_NORMALS); }