gpt4 book ai didi

c++ - 如何在 C++ OpenCV 中使用 OutputArrayOfArrays

转载 作者:太空宇宙 更新时间:2023-11-03 23:10:55 26 4
gpt4 key购买 nike

我一直在尝试创建一个函数,使用 OpenCV 代理的函数来接受多种类型的元素(inputArray、OutputArray、OutputArrayOfArrays)。

到目前为止,我找到了有关如何使用 InputArray 和 OutputArray 的信息,但没有找到关于 OutputArrayOfArrays 的信息。

我编写这段代码是为了测试对 OutputArrayOfArrays 的结果赋值,但没有用:

//Return 3 Mats, each one filled with a different primary color
void rgb_mats(cv::OutputArrayOfArrays results){
cv::vector<cv::Mat> bgr;
cv::Mat B(100,100, CV_8UC3, cv::Scalar(255,0,0));
cv::Mat G(100,100, CV_8UC3, cv::Scalar(0,255,0));
cv::Mat R(100,100, CV_8UC3, cv::Scalar(0,0,255));
bgr.push_back(B);
bgr.push_back(G);
bgr.push_back(R);
cv::merge(bgr, results);
}

这会因 OpenCV 断言而失败:

OpenCV Error: Assertion failed (dims == 2 && (sizes[0] == 1 || sizes[1] == 1 || sizes[0]*sizes[1] == 0)) in cv::_OutputArray::create, file C:\opencv_code\sources\modules\core\src\matrix.cpp, line 1564

我希望得到 3 个 cv::Mats,每个都有一种不同的颜色,以便稍后使用这样的函数:

cv::vector<cv::Mat> rgb_results;
rgb_mats(rgb_results);
assert(rgb_results.size() == 3);

我搜索了文档,但没有找到任何有关如何使用 OutputArrayofArrays 返回数据的示例。

为了传递断言,我可以在我的示例中更改什么?

最佳答案

您的问题不在 OutputArrayOfArrays 中但是用cv::merge你正在尝试合并 cv::vector<cv::Mat>到另一个相同类型的对象 cv::vector<cv::Mat>这不是什么cv::merge是假设做。您还声明 B , GR每个 3 channel CV_8UC3 ,所以你是变量 bgrresults大小 = 9 (3*3)。

结果代码看起来像这样:

#include <opencv2/highgui.hpp>
#include <vector>

template <typename T, typename ... Ts>
void insert_all(std::vector<T> &vec, Ts ... ts)
{
(vec.push_back(ts), ...);
}


void rgb_mats(cv::Mat& results)
{
std::vector<cv::Mat> bgr;
bgr.reserve(3);

cv::Mat B(100,100, CV_8UC1, cv::Scalar(255,0,0));
cv::Mat G(100,100, CV_8UC1, cv::Scalar(0,255,0));
cv::Mat R(100,100, CV_8UC1, cv::Scalar(0,0,255));

insert_all(bgr, B,G, R);

cv::merge(bgr, results);
}

int main ()
{
cv::Mat rgb_results;
rgb_mats(rgb_results);
}

关于c++ - 如何在 C++ OpenCV 中使用 OutputArrayOfArrays,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50376251/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com