C++ 如何在C++;OpenCV
我一直在尝试创建一个函数,使用OpenCV代理的函数来接受多种类型的元素(inputArray、OutputArray、OutputArrayOfarray) 到目前为止,我已经找到了关于如何使用InputArray和OutputArray的信息,但没有找到OutputarrayOfarray 我编写这段代码是为了测试OutputArrayOfArrays的结果分配,但没有结果:C++ 如何在C++;OpenCV,c++,opencv,C++,Opencv,我一直在尝试创建一个函数,使用OpenCV代理的函数来接受多种类型的元素(inputArray、OutputArray、OutputArrayOfarray) 到目前为止,我已经找到了关于如何使用InputArray和OutputArray的信息,但没有找到OutputarrayOfarray 我编写这段代码是为了测试OutputArrayOfArrays的结果分配,但没有结果: //Return 3 Mats, each one filled with a different primary
//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);
}
我希望得到3个cv::Mats,每个都有一种不同的颜色,以便以后使用如下函数:
cv::vector<cv::Mat> rgb_results;
rgb_mats(rgb_results);
assert(rgb_results.size() == 3);
cv::矢量rgb_结果;
rgb_垫(rgb_结果);
断言(rgb_results.size()=3);
我搜索了文档,没有找到任何关于如何使用OutputarrayOfarray返回数据的示例
在我的示例中,为了传递断言,我可以更改什么?您的问题不在
OutputArrayOfArrays
中,而是使用cv::merge
尝试将cv::vector
合并到同一类型的另一个对象cv::vector
,而cv::merge
不应该这样做。此外,您还将B
、G
和R
声明为3个通道,每个CV\u 8UC3
,因此您的变量bgr
或结果的大小将为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);
}
#包括
#包括
模板
无效插入所有(标准::向量和向量,Ts…Ts)
{
(矢量推回(ts),…);
}
无效rgb_垫(cv::垫和结果)
{
std::载体bgr;
bgr.储量(3);
cv::Mat B(100100,cv_8UC1,cv::Scalar(255,0,0));
cv::Mat G(100100,cv_8UC1,cv::Scalar(0255,0));
cv::Mat R(100100,cv_8UC1,cv::Scalar(0,0255));
插入所有(bgr、B、G、R);
合并(bgr,结果);
}
int main()
{
cv::Mat rgb_结果;
rgb_垫(rgb_结果);
}
您的函数应该返回一个bool
,但我看不到返回值。完全忘记了,谢谢
#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);
}