【发布时间】:2019-02-14 13:38:08
【问题描述】:
我想返回一个尺寸为 [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 中的三个通道中的每一个通道使用一个过滤器(内核)进行卷积。所以卷积函数在一个通道中返回运算结果(A single 2D Mat [][]),并将其存储在 feature_map Mat 数组中。如何返回这个 Mat 数组?
然后在我的 main() 函数中,我这样调用函数:
feature_map = three_channel_convolution(image, kernels[0]);
感谢您的帮助!
【问题讨论】:
-
你得到什么错误?
-
您声明了返回
cv::Mat的方法 -
您正在返回对临时对象(临时数组)的引用。您可以返回
std::shared_ptr<cv::Mat>或std::array<cv::Mat,3> -
您当前创建了三个不同的
cv::Mats,因为您cv::split输入图像。你只需要在返回之前再次cv::merge他们。