我正在尝试在 c 中制作一个简单的模糊效果。我在 512*512 RGB 像素数组中加载了一个图像,我正在使用 3x3 内核来模糊该图像
这是内核
float matrix[9] = {1.0f/9.0f, 1.0f/9.0f, 1.0f/9.0f, 1.0f/9.0f, 1.0f/9.0f, 1.0f/9.0f, 1.0f/9.0f, 1.0f/9.0f, 1.0f/9.0f};
这是进行模糊处理的代码
void useBlur(){
for(int i = 0; i < ARRAY_SIZE; i++){
float r = 0;
float g = 0;
float b = 0;
int m, n;
for(int y = -1, m = 0; y <= 1; y++, m++){
for(int z = -1, n = 0; z <= 1; z++, n++){
r += (float)orig_image[i + 512 * y + z].r * (float)matrix[m*3+n];
g += (float)orig_image[i + 512 * y + z].g * (float)matrix[m*3+n];
b += (float)orig_image[i + 512 * y + z].b * (float)matrix[m*3+n];
}
}
image[i].r = r;
image[i].g = g;
image[i].b = b;
}
}
我不确定该代码有什么问题,但它正在产生结果:
任何想法为什么颜色是错误的?以及如何解决?
编辑:将矩阵 [7] 从 9.0/9.0 固定到 1.0/9.0 并上传新图像