如何从函数返回多维垫阵列
How to return a multidimensional Mat array from a function
我想返回带有[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。请在其他帖子中报告确切的错误消息。
相关文章:
- 来自 std::list 的迭代器 .end() 按预期返回"0xcdcdcdcdcdcdcdcd"但 .begin()
- 什么时候在C++中返回常量引用是个好主意
- 你能重载对象变量名本身返回的内容吗
- 为什么 Serial.println(<char[]>);返回随机字符?
- C++映射:具有自定义类的运算符[]不起作用(总是返回0)
- 返回C 中2D阵列的对角线元素总和
- 阵列通过和返回
- 通过从当地的C风格阵列中返回指针来获取一个悬空的指针
- OPENCL-如何使辅助功能返回阵列并将内存的部分从恒定内存空间转移到私有
- 返回二维阵列
- 求和大阵列返回C/C 中的0
- 问题创建和返回锯齿状阵列(错误std :: bad_array_new_length)
- 如何返回通过memcpy函数修改的两个阵列
- 阵列指针返回垃圾
- 如何从函数返回多维垫阵列
- 动态字符串阵列构造函数和空返回
- 静态数组成员的尺寸返回指针的大小,而不是阵列
- 有没有办法将C 中的两个阵列连接并返回它们
- 在函数中定义一个动态数组,然后返回数组元素。如何释放阵列的内存?
- 在c++中传递并返回2D阵列