RGB 2 YUV 亮度与对比度调节
来源:互联网 发布:淘宝卖家数量 编辑:程序博客网 时间:2024/04/29 19:15
从BMP图中读取RGB值并转化成YUV
BYTE *** rgb2yuv(const char *filename){ BYTE ***image; FILE *file; int i, j, k; int biBitCount, offset; int *x; /* RGBQUAD aColors[]; BYTE aBitmapBits[]; */ if (!(file=fopen(filename,"rb"))) { printf("Cannot open file %s.\n", filename); return 0; } fread(&bmfhdr.bfType, sizeof(WORD), 1, file); fread(&bmfhdr.bfSize, sizeof(DWORD), 1, file); fread(&bmfhdr.bfReserved1, sizeof(WORD), 1, file); fread(&bmfhdr.bfReserved2, sizeof(WORD), 1, file); fread(&bmfhdr.bfOffBits, sizeof(DWORD), 1, file); fread(&bmihdr.biSize, sizeof(DWORD), 1, file); fread(&bmihdr.biWidth, sizeof(LONG), 1, file); fread(&bmihdr.biHeight, sizeof(LONG), 1, file); fread(&bmihdr.biPlanes, sizeof(WORD), 1, file); fread(&bmihdr.biBitCount, sizeof(WORD), 1, file); fread(&bmihdr.biCompression, sizeof(DWORD), 1, file); fread(&bmihdr.biSizeImage, sizeof(DWORD), 1, file); fread(&bmihdr.biXPelsPerMeter, sizeof(LONG), 1, file); fread(&bmihdr.biYPelsPerMeter, sizeof(LONG), 1, file); fread(&bmihdr.biClrUsed, sizeof(DWORD), 1, file); fread(&bmihdr.biClrImportant, sizeof(DWORD), 1, file); //fread(&bmfhdr,sizeof(bmfhdr),1,file); //fread(&bmihdr,sizeof(bmihdr),1,file); printf("| biBitCount: %d\n", bmihdr.biBitCount); if (bmihdr.biBitCount == 1) { RGBQUAD aColors[2]; for (i=0; i<2; i++) { fread(&aColors[i].rgbBlue, sizeof(BYTE), 1, file); fread(&aColors[i].rgbGreen, sizeof(BYTE), 1, file); fread(&aColors[i].rgbRed, sizeof(BYTE), 1, file); fread(&aColors[i].rgbReserved, sizeof(BYTE), 1, file); printf("| rgbBlue: %d\t rgbGreen: %d\t rgbRed: %d\t rgbReserved: %d\n", aColors[i].rgbBlue, aColors[i].rgbGreen, aColors[i].rgbRed, aColors[i].rgbReserved); } } else if (bmihdr.biBitCount == 8) { RGBQUAD aColors[256]; for (i=0; i<8; i++) { fread(&aColors[i].rgbBlue, sizeof(BYTE), 1, file); fread(&aColors[i].rgbGreen, sizeof(BYTE), 1, file); fread(&aColors[i].rgbRed, sizeof(BYTE), 1, file); fread(&aColors[i].rgbReserved, sizeof(BYTE), 1, file); printf("| rgbBlue: %d\t rgbGreen: %d\t rgbRed: %d\t rgbReserved: %d\n", aColors[i].rgbBlue, aColors[i].rgbGreen, aColors[i].rgbRed, aColors[i].rgbReserved); } } else if (bmihdr.biBitCount == 24) { printf(" It's rgb bmp image without palette.\n"); } else { printf("Something wrong with biBitCount of image %s.\n", filename); return 0; } printf("+------------------+\n"); /* display bmp image attributes. */ biBitCount = bmihdr.biBitCount; if (biBitCount == 1) { printf("%s is Binary image.\n", filename); } else if (biBitCount == 8) { printf("%s is Gray-Level or Indexed image.\n", filename); } else if (biBitCount == 24) { printf("%s is RGB image.\n", filename); } else { printf("Something wrong with biBitCount of image %s.\n", filename); } /* width and height of bmp image. */ width = bmihdr.biWidth; height = bmihdr.biHeight; level = 3; /* for RGB only */ /* malloc for 3-D array ***image and 1-D array *x. */ image = (BYTE ***)malloc(height*sizeof(BYTE **)); for (i=0; i<height; i++) image[i] = (BYTE **)malloc(width*sizeof(BYTE *)); for(i=0; i<height; i++) for (j=0; j<width; j++) image[i][j] = (BYTE *)malloc(level*sizeof(BYTE)); x = (int *)malloc(level*sizeof(int)); /* initialize 3-D array ***image and 1-D array *x. */ for (i=0; i<height; i++) for (j=0; j<width; j++) for (k=0; k<level; k++) image[i][j][k] = 0; for (k=0; k<level; k++) x[k] = 0; /* read pixel from file to array image. */ /* bmihdr.biBitCount = 1 -> Binary image. bmihdr.biBitCount = 8 -> Gray-Level or Indexed image. bmihdr.biBitCount = 24 -> RGB image. */ if ((bmihdr.biBitCount == 1) || (bmihdr.biBitCount == 8)) { offset = bmfhdr.bfOffBits - 54; fseek(file, offset, SEEK_CUR); for (i=height-1; i>=0; i--) { for (j=0; j<width; j++) { image[i][j][0] = fgetc(file); } } } else if (bmihdr.biBitCount == 24) { for (i=height-1; i>=0; i--) { for (j=0; j<width; j++) for (k=level-1; k>=0; k--) image[i][j][k] = fgetc(file); /* if(3*width%4 != 0) fseek(file, 4-width*3%4, SEEK_CUR); */ } } else { printf("Something wrong with biBitCount of image %s.\n", filename); return 0; } printf("==================oldimage===================\n"); for (int i = 0; i < height; ++i) { for (int j = 0; j < width; ++j) { //Y[i][j] += (255 -maxY)/5; printf("%d %d %d *", image[i][j][0],image[i][j][1],image[i][j][2]); } printf("\n"); } Y = (BYTE **) malloc(height*sizeof(BYTE *)); U = (char **) malloc(height*sizeof(char *)); V = (char **) malloc(height*sizeof(char *)); for (int i = 0; i < height; ++i) { Y[i] = (BYTE *) malloc(width*sizeof(BYTE)); U[i] = (char *) malloc(width*sizeof(char)); V[i] = (char *) malloc(width*sizeof(char)); for (int j = 0; j < width; ++j) { Y[i][j] = (BYTE)(0.299*image[i][j][0] + 0.587*image[i][j][1] + 0.114*image[i][j][2]); U[i][j] = (BYTE)(-0.147*image[i][j][0] -0.289*image[i][j][1] + 0.435*image[i][j][2]); V[i][j] = (BYTE)(0.615*image[i][j][0] -0.515*image[i][j][1] + -0.100*image[i][j][2]); if (maxY < Y[i][j]) { maxY = Y[i][j]; /* code */ } if (minY > Y[i][j]) { minY = Y[i][j]; /* code */ } } } fclose(file); return image;}
调节对比度,输出灰度图
int toGray(char * filename){ printf("==================newY===================\n"); BYTE** newY; newY = (BYTE **) malloc(height*sizeof(BYTE *)); for (int i = 0; i < height; ++i) { newY[i] = (BYTE *) malloc(width*sizeof(BYTE)); for (int j = 0; j < width; ++j) { newY[i][j] = (Y[i][j]-minY)*1.0/(maxY - minY)*255; } } FILE * file2; printf("==================Gray-Level-writing===================\n"); if (!(file2=fopen("test.bmp","wb"))) { printf("Cannot open file %s.\n", filename); return(7); } fwrite(&bmfhdr.bfType, sizeof(WORD), 1, file2); fwrite(&bmfhdr.bfSize, sizeof(DWORD), 1, file2); fwrite(&bmfhdr.bfReserved1, sizeof(WORD), 1, file2); fwrite(&bmfhdr.bfReserved2, sizeof(WORD), 1, file2); fwrite(&bmfhdr.bfOffBits, sizeof(DWORD), 1, file2); fwrite(&bmihdr.biSize, sizeof(DWORD), 1, file2); fwrite(&bmihdr.biWidth, sizeof(LONG), 1, file2); fwrite(&bmihdr.biHeight, sizeof(LONG), 1, file2); fwrite(&bmihdr.biPlanes, sizeof(WORD), 1, file2); fwrite(&bmihdr.biBitCount, sizeof(WORD), 1, file2); fwrite(&bmihdr.biCompression, sizeof(DWORD), 1, file2); fwrite(&bmihdr.biSizeImage, sizeof(DWORD), 1, file2); fwrite(&bmihdr.biXPelsPerMeter, sizeof(LONG), 1, file2); fwrite(&bmihdr.biYPelsPerMeter, sizeof(LONG), 1, file2); fwrite(&bmihdr.biClrUsed, sizeof(DWORD), 1, file2); fwrite(&bmihdr.biClrImportant, sizeof(DWORD), 1, file2); for (int i=height-1; i>=0; i--) { for (int j=0; j<width; j++) for (int k=level-1; k>=0; k--) fwrite(&Y[i][j],sizeof(BYTE),1,file2); //image[i][j][k] = fgetc(file); } fclose(file2); return 0;}
调节亮度,输出RGB图
int ChangeLuminance(int delta, const char *filename, BYTE ***image){ int temp=0; printf("==================newimage===================\n"); for (int i = 0; i < height; ++i) { for (int j = 0; j < width; ++j) { Y[i][j] =Y[i][j] > 255-delta?255:Y[i][j] < -delta?0:Y[i][j]+delta; temp = (1.0*Y[i][j] + 0*U[i][j] + 1.1398*V[i][j]); image[i][j][0] = temp>255?255:temp<0?0:temp; temp = (0.9996*Y[i][j] -0.3954*U[i][j] -0.5805*V[i][j]); image[i][j][1] = temp>255?255:temp<0?0:temp; temp= (1.0020*Y[i][j] + 2.0361*U[i][j] -0.0005*V[i][j]); image[i][j][2] = temp>255?255:temp<0?0:temp; printf("%d %d %d *", image[i][j][0],image[i][j][1],image[i][j][2]); } printf("\n"); } FILE * file2; printf("==========================================\n"); if (!(file2=fopen(filename,"wb"))) { printf("Cannot open file %s.\n", filename); return(7); } fwrite(&bmfhdr.bfType, sizeof(WORD), 1, file2); fwrite(&bmfhdr.bfSize, sizeof(DWORD), 1, file2); fwrite(&bmfhdr.bfReserved1, sizeof(WORD), 1, file2); fwrite(&bmfhdr.bfReserved2, sizeof(WORD), 1, file2); fwrite(&bmfhdr.bfOffBits, sizeof(DWORD), 1, file2); fwrite(&bmihdr.biSize, sizeof(DWORD), 1, file2); fwrite(&bmihdr.biWidth, sizeof(LONG), 1, file2); fwrite(&bmihdr.biHeight, sizeof(LONG), 1, file2); fwrite(&bmihdr.biPlanes, sizeof(WORD), 1, file2); fwrite(&bmihdr.biBitCount, sizeof(WORD), 1, file2); fwrite(&bmihdr.biCompression, sizeof(DWORD), 1, file2); fwrite(&bmihdr.biSizeImage, sizeof(DWORD), 1, file2); fwrite(&bmihdr.biXPelsPerMeter, sizeof(LONG), 1, file2); fwrite(&bmihdr.biYPelsPerMeter, sizeof(LONG), 1, file2); fwrite(&bmihdr.biClrUsed, sizeof(DWORD), 1, file2); fwrite(&bmihdr.biClrImportant, sizeof(DWORD), 1, file2); for (int i=height-1; i>=0; i--) { for (int j=0; j<width; j++) for (int k=level-1; k>=0; k--) fwrite(&image[i][j][k],sizeof(BYTE),1,file2); } fclose(file2); return(0);}
0 0
- RGB 2 YUV 亮度与对比度调节
- opencv 亮度与对比度调节
- 图像亮度、对比度调节
- opencv亮度对比度调节
- OpenCV图像亮度、对比度调节
- opencv调节图片亮度对比度
- OPenCV3.2 调整图像对比度与亮度
- 关于亮度,对比度以及色度调节
- iOS 调节图片亮度,饱和度,对比度
- opencv图像的对比度、亮度调节
- Opencv中用进度条调节亮度、对比度
- OpenCV 图像对比度和亮度调节
- opencv学习之一亮度对比度调节
- chapter12_1对比度与亮度调整
- saturate_cast 图像对比度与亮度
- OpenCV学习——图像亮度、对比度调节
- 学习opencv 一幅图像的对比度和亮度调节
- 图像亮度、对比度调节(伽马校正)
- linux读书笔记9
- Razor模板引擎
- PHP STR
- 详解Qt样式/颜色机制:调色板(QPalette)与样式表(Style Sheets)
- 带复选框的CTreeCtrl响应复选消息的一个解决方法
- RGB 2 YUV 亮度与对比度调节
- [BZOJ1612][Usaco2008 Jan]Cow Contest奶牛的比赛
- opencv3检测凸包convexHull函数-使用方法一-滚动条
- Ubuntu安装Genymotion
- 一、备忘
- Array.prototype.push结合apply 实现 object 伪装数组
- GetROProperty,GetTOProperties,GetTOProperty区别
- 利用Object中的key的唯一性去除数组的重复项
- opencv3检测凸包convexHull函数-使用方式二