Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何在C++;OpenCV_C++_Opencv - Fatal编程技术网

C++ 如何在C++;OpenCV

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

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

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

我编写这段代码是为了测试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);
}
我希望得到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);
}