如何从函数返回多维垫阵列

How to return a multidimensional Mat array from a function

本文关键字:阵列 返回 函数      更新时间:2023-10-16

我想返回带有[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垫[] []),并将其存储在feature_map 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。请在其他帖子中报告确切的错误消息。