用C语言写八邻域提取边线的代码
时间: 2023-03-27 16:02:08 浏览: 97
以下是用C语言写八邻域提取边线的代码:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define WIDTH 512
#define HEIGHT 512
int main()
{
int i, j, k, l;
int gx, gy;
int image[HEIGHT][WIDTH];
int edge[HEIGHT][WIDTH];
int threshold = 50;
// 读取图像
FILE *fp = fopen("lena.raw", "rb");
fread(image, sizeof(int), WIDTH * HEIGHT, fp);
fclose(fp);
// 计算边缘
for (i = 1; i < HEIGHT - 1; i++) {
for (j = 1; j < WIDTH - 1; j++) {
gx = gy = ;
for (k = -1; k <= 1; k++) {
for (l = -1; l <= 1; l++) {
gx += image[i + k][j + l] * (k == ? : (k == -1 || k == 1 ? 1 : 2));
gy += image[i + k][j + l] * (l == ? : (l == -1 || l == 1 ? 1 : 2));
}
}
edge[i][j] = sqrt(gx * gx + gy * gy) > threshold ? 255 : ;
}
}
// 保存边缘图像
fp = fopen("lena_edge.raw", "wb");
fwrite(edge, sizeof(int), WIDTH * HEIGHT, fp);
fclose(fp);
return ;
}