c语言美颜程序的源代码
时间: 2023-06-10 19:08:35 浏览: 71
以下是一份使用C语言编写的简单美颜程序的源代码。该程序可对图像进行模糊处理,以达到美颜的效果。
```c
#include <stdio.h>
#include <stdlib.h>
#define STB_IMAGE_IMPLEMENTATION
#include "stb_image.h"
#define STB_IMAGE_WRITE_IMPLEMENTATION
#include "stb_image_write.h"
// 高斯模糊函数
void blur(unsigned char *img, int w, int h, int n) {
int size = 2 * n + 1;
float kernel[size][size];
float sigma = n / 3.0f;
float sum = 0.0f;
for (int i = 0; i < size; i++) {
for (int j = 0; j < size; j++) {
kernel[i][j] = exp(-(i * i + j * j) / (2 * sigma * sigma));
sum += kernel[i][j];
}
}
for (int i = 0; i < size; i++) {
for (int j = 0; j < size; j++) {
kernel[i][j] /= sum;
}
}
unsigned char *buf = malloc(w * h * sizeof(unsigned char));
for (int y = 0; y < h; y++) {
for (int x = 0; x < w; x++) {
float r = 0.0f, g = 0.0f, b = 0.0f;
for (int i = -n; i <= n; i++) {
for (int j = -n; j <= n; j++) {
int xx = x + j;
int yy = y + i;
if (xx >= 0 && xx < w && yy >= 0 && yy < h) {
int idx = yy * w + xx;
r += img[idx * 3] * kernel[i + n][j + n];
g += img[idx * 3 + 1] * kernel[i + n][j + n];
b += img[idx * 3 + 2] * kernel[i + n][j + n];
}
}
}
int idx = y * w + x;
buf[idx * 3] = (unsigned char)r;
buf[idx * 3 + 1] = (unsigned char)g;
buf[idx * 3 + 2] = (unsigned char)b;
}
}
for (int i = 0; i < w * h * 3; i++) {
img[i] = buf[i];
}
free(buf);
}
int main(int argc, char *argv[]) {
if (argc < 2) {
printf("Usage: %s <image file>\n", argv[0]);
return 1;
}
int w, h, n;
unsigned char *img = stbi_load(argv[1], &w, &h, &n, 3);
if (img == NULL) {
printf("Failed to load image.\n");
return 1;
}
blur(img, w, h, 10);
stbi_write_jpg("output.jpg", w, h, 3, img, 90);
stbi_image_free(img);
printf("Done.\n");
return 0;
}
```
该程序使用了第三方库`stb_image`和`stb_image_write`,需要将其下载并与源代码一起编译。在程序运行时,它会读取一个指定的图像文件,对其进行高斯模糊处理,并将结果保存到另一个文件中。
使用方法:
1. 下载源代码和`stb_image`、`stb_image_write`库文件;
2. 在命令行中进入源代码所在目录;
3. 使用以下命令编译程序:
```
gcc -o beauty main.c stb_image.c stb_image_write.c
```
4. 运行程序并指定要处理的图像文件:
```
./beauty input.jpg
```
5. 程序将会生成`output.jpg`文件,即处理后的图像。