我想返回一个带[w] [h] [c]维度的cv :: Mat对象,其中w是宽度,h是高度,c是通道或深度。但是编译器给了我一个错误。
这是我的代码:
cv::Mat three_channel_convolution(cv::Mat bgr_image, cv::Mat kernel)
{
cv::Mat feature_map[3];
cv::Mat bgr[3];
cv::split(bgr_image, bgr);
for (uchar i = 0; i < 3; i++)
{
feature_map[i] = one_channel_convolution(bgr[i], kernel);
std::string name_feature_map = "bgr_feature_map_" + std::to_string(i) + ".jpg";
cv::imwrite(name_feature_map, feature_map[i]);
}
return feature_map;
}
在这个函数中,我想为图像BGR中的三个通道中的每个通道使用滤波器(内核)进行卷积。因此卷积函数在一个通道(单个2D Mat [] [])中返回操作的结果,并将其存储在feature_map Mat数组中。我怎样才能返回这个Mat数组?
然后在我的main()函数中,我调用这样的函数:
feature_map = three_channel_convolution(image, kernels[0]);
谢谢您的帮助!
函数three_channel_convolution
的返回值是cv::Mat
,但是你返回cv::Mat[3]
。
如果您想返回3d矩阵,则需要将函数的签名更改为std::array<cv::Mat, 3>
。请记住,这可能会有一些性能问题。
std::array<cv::Mat, 3> three_channel_convolution(cv::Mat bgr_image, cv::Mat kernel) {
std::array<cv::Mat, 3> feature_map;
std::array<cv::Mat, 3> bgr;
cv::split(bgr_image, bgr);
for (uchar i = 0; i < 3; i++) {
feature_map[i] = one_channel_convolution(bgr[i], kernel);
std::string name_feature_map = "bgr_feature_map_" + std::to_string(i) + ".jpg";
cv::imwrite(name_feature_map, feature_map[i]);
}
return feature_map;
}
PS。请在其他帖子中报告确切的错误消息。