写一个c++ 对图像膨胀的的代码
时间: 2023-04-12 21:01:37 浏览: 105
以下是一个简单的 C 代码,用于实现图像膨胀:
```
#include <stdio.h>
#include <stdlib.h>
#define ROWS 10
#define COLS 10
void dilate(int img[ROWS][COLS], int kernel[3][3]) {
int i, j, k, l, max;
int temp[ROWS][COLS];
for (i = 0; i < ROWS; i++) {
for (j = 0; j < COLS; j++) {
max = 0;
for (k = -1; k <= 1; k++) {
for (l = -1; l <= 1; l++) {
if (i + k >= 0 && i + k < ROWS && j + l >= 0 && j + l < COLS) {
if (img[i + k][j + l] + kernel[k + 1][l + 1] > max) {
max = img[i + k][j + l] + kernel[k + 1][l + 1];
}
}
}
}
temp[i][j] = max;
}
}
for (i = 0; i < ROWS; i++) {
for (j = 0; j < COLS; j++) {
img[i][j] = temp[i][j];
}
}
}
int main() {
int img[ROWS][COLS] = {
{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, 1, 1, 1, 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}
};
int kernel[3][3] = {
{0, 1, 0},
{1, 1, 1},
{0, 1, 0}
};
dilate(img, kernel);
int i, j;
for (i = 0; i < ROWS; i++) {
for (j = 0; j < COLS; j++) {
printf("%d ", img[i][j]);
}
printf("\n");
}
return 0;
}
```
这个代码实现了一个简单的图像膨胀算法,使用了一个 3x3 的卷积核。在这个例子中,我们使用了一个 10x10 的二值图像,其中 1 表示前景,0 表示背景。我们将卷积核应用于图像中的每个像素,将其与周围的像素进行比较,找到最大值,并将其作为输出像素的值。这个过程可以使前景区域变得更加连通和凸出。
阅读全文