用简单的C++语言生成一个随机数矩阵,随机数的范围是0-255,程序可以进行滤波操作,其中滤波核大小和值由用户进行设置
时间: 2024-05-13 10:13:41 浏览: 59
很高兴回答您的问题。以下是用 C 语言生成随机数矩阵并进行滤波操作的示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
// 定义矩阵大小
#define ROWS 10
#define COLS 10
// 定义滤波核大小
#define KERNEL_SIZE 3
// 定义滤波核值
int kernel[KERNEL_SIZE][KERNEL_SIZE] = {
{1, 1, 1},
{1, 1, 1},
{1, 1, 1}
};
// 生成随机数矩阵
void generateRandomMatrix(unsigned char matrix[ROWS][COLS]) {
// 设置随机数种子
srand(time(NULL));
for (int i = 0; i < ROWS; i++) {
for (int j = 0; j < COLS; j++) {
matrix[i][j] = rand() % 256;
}
}
}
// 输出矩阵
void printMatrix(unsigned char matrix[ROWS][COLS]) {
for (int i = 0; i < ROWS; i++) {
for (int j = 0; j < COLS; j++) {
printf("%3d ", matrix[i][j]);
}
printf("\n");
}
}
// 进行滤波操作
void filterMatrix(unsigned char src[ROWS][COLS], unsigned char dst[ROWS][COLS]) {
int kernel_sum = 0;
// 计算滤波核值之和
for (int i = 0; i < KERNEL_SIZE; i++) {
for (int j = 0; j < KERNEL_SIZE; j++) {
kernel_sum += kernel[i][j];
}
}
// 对矩阵进行滤波操作
for (int i = 0; i < ROWS; i++) {
for (int j = 0; j < COLS; j++) {
int sum = 0;
for (int k = -KERNEL_SIZE/2; k <= KERNEL_SIZE/2; k++) {
for (int l = -KERNEL_SIZE/2; l <= KERNEL_SIZE/2; l++) {
// 处理边界情况
int row = i + k;
int col = j + l;
if (row < 0) {
row = 0;
} else if (row >= ROWS) {
row = ROWS - 1;
}
if (col < 0) {
col = 0;
} else if (col >= COLS) {
col = COLS - 1;
}
// 累加滤波核内的像素值
sum += kernel[k+KERNEL_SIZE/2][l+KERNEL_SIZE/2] * src[row][col];
}
}
// 计算滤波后的像素值
dst[i][j] = sum / kernel_sum;
}
}
}
int main() {
// 定义源矩阵和目标矩阵
unsigned char src[ROWS][COLS];
unsigned char dst[ROWS][COLS];
// 生成随机数矩阵并输出
generateRandomMatrix(src);
printf("Source Matrix:\n");
printMatrix(src);
// 进行滤波操作并输出
filterMatrix(src, dst);
printf("Filtered Matrix:\n");
printMatrix(dst);
return 0;
}
```
希望能够帮助您!
阅读全文