如何从函数 return 多维 Mat 数组

How to return a multidimensional Mat array from a function

我想要 return 一个 cv::Mat 尺寸为 [w][h][c] 的对象,其中 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 中的三个通道中的每一个通道与过滤器(内核)进行卷积。所以卷积函数returns将一个通道(A single 2D Mat[][])中的运算结果存储在feature_mapMat数组中。我怎样才能 return 这个 Mat 数组?

然后在我的 main() 函数中,我这样调用函数:

feature_map = three_channel_convolution(image, kernels[0]);

感谢您的帮助!

函数three_channel_convolution的return值是cv::Mat,但是你returncv::Mat[3].

如果您喜欢 return 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。请在以后的帖子中报告确切的错误消息。