【发布时间】:2018-05-17 02:18:58
【问题描述】:
我一直在尝试创建一个函数,使用 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 返回数据的示例。
为了传递断言,我可以在示例中进行哪些更改?
【问题讨论】:
-
你的函数应该返回一个
bool,但我没有看到返回值。 -
完全忘记了,谢谢