如何从函数 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。请在以后的帖子中报告确切的错误消息。
我想要 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。请在以后的帖子中报告确切的错误消息。