可以使用C++标准库中的vector
来实现一个简单的2维卷积函数。以下是一个示例代码:
#include <iostream>
#include <vector>
using namespace std;
// 二维卷积函数
vector<vector<int>> conv2d(const vector<vector<int>>& img, const vector<vector<int>>& kernel)
{
int img_rows = img.size();
int img_cols = img[0].size();
int kernel_rows = kernel.size();
int kernel_cols = kernel[0].size();
vector<vector<int>> result(img_rows - kernel_rows + 1, vector<int>(img_cols - kernel_cols + 1));
for (int i = 0; i < result.size(); ++i)
{
for (int j = 0; j < result[0].size(); ++j)
{
int sum = 0;
for (int k = 0; k < kernel_rows; ++k)
{
for (int l = 0; l < kernel_cols; ++l)
{
sum += img[i + k][j + l] * kernel[k][l];
}
}
result[i][j] = sum;
}
}
return result;
}
int main()
{
// 测试数据
vector<vector<int>> img = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};
vector<vector<int>> kernel = {{1, 0}, {0, 1}};
// 二维卷积运算
vector<vector<int>> result = conv2d(img, kernel);
// 输出结果
for (int i = 0; i < result.size(); ++i)
{
for (int j = 0; j < result[0].size(); ++j)
{
cout << result[i][j] << " ";
}
cout << endl;
}
return 0;
}
在上面的示例代码中,conv2d
函数实现了一个简单的二维卷积操作,输入为一个二维矩阵img
和一个卷积核kernel
,输出为卷积后的结果result
。该函数使用双重循环遍历输入矩阵和卷积核,计算卷积和并存储到输出矩阵中。最后,将卷积后的结果返回。
在主函数中,我们定义了一个测试数据img
和一个卷积核kernel
,并调用conv2d
函数进行卷积运算。最后,将卷积后的结果输出到控制台。