#include "gaussFilte.h" void gaussianFilter(unsigned char* data, int width, int height, int type) { if (type == 3) { int i, j, index, sum; int templates[9] = {1, 2, 1, 2, 4, 2, 1, 2, 1}; //模板的值 unsigned char* tmpdata = new unsigned char[height * width]; for (i = 0; i < height * width; i++) { tmpdata[i] = data[i]; } for(i = 1; i < height - 1; i++) { for(j = 1; j < width - 1; j++) { index = sum = 0; for(int m = i - 1;m < i + 2; m++) { for(int n = j - 1; n < j + 2; n++) { sum += tmpdata[m * width + n] * templates[index++]; //处理 } } data[i * width + j] = sum >> 4; } } delete[] tmpdata; } else { int i, j, index, sum; int templates[25] = {1, 4, 7, 4, 1, 4, 16, 26, 16, 4, 7, 26, 41, 26, 7, 4, 16, 26, 16, 4, 1, 4, 7, 4, 1}; //模板的值 unsigned char* tmpdata = new unsigned char[height * width]; for (i = 0; i < height * width; i++) { tmpdata[i] = data[i]; } for(i = 1; i < height - 1; i++) { for(j = 1; j < width - 1; j++) { index = sum = 0; for(int m = i - 2;m < i + 3; m++) { for(int n = j - 2; n < j + 3; n++) { sum += tmpdata[m * width + n] * templates[index++]; //处理 } } data[i * width + j] = sum / 273; } } delete[] tmpdata; } }