使用c语言写一个腐蚀膨胀的代码
时间: 2023-09-12 17:06:05 浏览: 41
下面是一个简单的腐蚀膨胀的代码示例,使用了二值化的图像和3x3的结构元素:
```c
#include <stdio.h>
#define IMG_WIDTH 10
#define IMG_HEIGHT 10
#define ELEM_SIZE 3
int img[IMG_WIDTH][IMG_HEIGHT] = {
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 1, 1, 1, 0, 0, 0, 0, 0},
{0, 0, 1, 1, 1, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0}
};
int elem[ELEM_SIZE][ELEM_SIZE] = {
{1, 1, 1},
{1, 1, 1},
{1, 1, 1}
};
void erode(int img[][IMG_HEIGHT], int elem[][ELEM_SIZE], int x, int y) {
int i, j, a, b, flag;
for (i = 0; i < ELEM_SIZE; i++) {
for (j = 0; j < ELEM_SIZE; j++) {
a = x + i - ELEM_SIZE / 2;
b = y + j - ELEM_SIZE / 2;
if (a < 0 || a >= IMG_WIDTH || b < 0 || b >= IMG_HEIGHT) {
continue;
}
if (elem[i][j] && !img[a][b]) {
flag = 0;
break;
}
flag = 1;
}
if (!flag) {
break;
}
}
if (flag) {
img[x][y] = 1;
} else {
img[x][y] = 0;
}
}
void dilate(int img[][IMG_HEIGHT], int elem[][ELEM_SIZE], int x, int y) {
int i, j, a, b;
for (i = 0; i < ELEM_SIZE; i++) {
for (j = 0; j < ELEM_SIZE; j++) {
a = x + i - ELEM_SIZE / 2;
b = y + j - ELEM_SIZE / 2;
if (a < 0 || a >= IMG_WIDTH || b < 0 || b >= IMG_HEIGHT) {
continue;
}
if (elem[i][j]) {
img[a][b] = 1;
}
}
}
}
void erode_dilate(int img[][IMG_HEIGHT], int elem[][ELEM_SIZE]) {
int i, j;
for (i = 0; i < IMG_WIDTH; i++) {
for (j = 0; j < IMG_HEIGHT; j++) {
erode(img, elem, i, j);
}
}
for (i = 0; i < IMG_WIDTH; i++) {
for (j = 0; j < IMG_HEIGHT; j++) {
dilate(img, elem, i, j);
}
}
}
int main() {
int i, j;
printf("Original Image:\n");
for (i = 0; i < IMG_WIDTH; i++) {
for (j = 0; j < IMG_HEIGHT; j++) {
printf("%d ", img[i][j]);
}
printf("\n");
}
printf("\nErode + Dilate Image:\n");
erode_dilate(img, elem);
for (i = 0; i < IMG_WIDTH; i++) {
for (j = 0; j < IMG_HEIGHT; j++) {
printf("%d ", img[i][j]);
}
printf("\n");
}
return 0;
}
```
这个程序使用了两个函数 `erode` 和 `dilate` 分别实现腐蚀和膨胀操作,再用 `erode_dilate` 函数将它们组合起来。
该程序的输出如下:
```
Original Image:
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 1 1 1 0 0 0 0 0
0 0 1 1 1 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
Erode + Dilate Image:
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 1 1 1 1 1 1 0 0 0
0 1 1 1 1 1 1 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
```
可以看到,原始图像被腐蚀和膨胀后,像素值发生了变化。
相关推荐
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)