Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/17.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++ 我可以使用opencv函数吗,比如cv::multiply with std::vector<;cv::Mat>;作为输入和输出参数?_C++_Opencv_Image Processing - Fatal编程技术网

C++ 我可以使用opencv函数吗,比如cv::multiply with std::vector<;cv::Mat>;作为输入和输出参数?

C++ 我可以使用opencv函数吗,比如cv::multiply with std::vector<;cv::Mat>;作为输入和输出参数?,c++,opencv,image-processing,C++,Opencv,Image Processing,阅读opencv的文档,我觉得我可以使用std::vector作为任何函数的输入和输出参数,这些函数接收InputArray和输出OutputArray类,例如cv::multiply 然而,我似乎无法让它工作: float data[3][3] = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}}; cv::Mat mat = cv::Mat(3, 3, CV_32F, data); std::vector<cv::Mat> vecMat = {mat,

阅读opencv的文档,我觉得我可以使用std::vector作为任何函数的输入和输出参数,这些函数接收
InputArray
和输出
OutputArray
类,例如
cv::multiply

然而,我似乎无法让它工作:

float data[3][3] = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};

cv::Mat mat = cv::Mat(3, 3, CV_32F, data);

std::vector<cv::Mat> vecMat = {mat, mat, mat};


std::vector<cv::Mat> outputVecMat;
cv::multiply(vecMat, vecMat, outputVecMat);
float data[3][3]={{1,2,3},{4,5,6},{7,8,9};
cv::Mat Mat=cv::Mat(3,3,cv_32F,数据);
向量向量向量={mat,mat,mat};
std::向量输出向量矩阵;
cv::乘法(vecMat、vecMat、outputVecMat);

我在这里是做错了什么,还是只是错过了解释文档?

InputArray
基本上是围绕
cv::Mat
std::vector
的包装类。但是,
(与除法相同)需要一维或二维矩阵。例如,有效代码可以是:

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

int main()
{
    float data[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
    cv::Mat mat = cv::Mat(3, 3, CV_32F, data);

    // Multiply cv::Mat
    cv::Mat outMat;
    cv::multiply(mat, mat, outMat);

    // Multiply std::vector
    std::vector<float> vec(data, data + 9);
    std::vector<float> outVec;
    cv::multiply(vec, vec, outVec);

    return 0;
}

这里的问题不是
输入阵列的格式不正确。事实上,使用
种类
等于
STD\u VECTOR\u MAT
时,它是正确创建的。问题是
乘法
期望
输入阵列
cv::Mat
std::vector
,其中
T
为内置类型(
int
float
等)


您可以看到,接受
std::vector
的OpenCV函数具有
cv::InputArrayOfArrays
cv::OutputArrayOfArrays
类型的参数,其中
std::vector
T
类型显然是
cv::Mat

是,我就是这样做的,但后来我读到了这一部分,其中说可以从
std::vector
中构造
InputArray
。那么这不是真的吗?
#include <opencv2/opencv.hpp>
#include <vector>


void mymul(const std::vector<cv::Mat>& src1, const std::vector<cv::Mat>& src2, std::vector<cv::Mat>& dst)
{
    dst.clear();

    // Be sure that src1 and src2 have the same number of elements
    CV_Assert(src1.size() == src2.size());

    dst.resize(src1.size());

    for (int i = 0; i < src1.size(); ++i)
    {
        cv::multiply(src1[i], src2[i], dst[i]);
    }
}

int main()
{
    float data[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
    cv::Mat mat = cv::Mat(3, 3, CV_32F, data);

    std::vector<cv::Mat> vecMat = { mat, mat, mat };

    std::vector<cv::Mat> outputVecMat;

    // Call custom multiply that works on std::vector<cv::Mat>
    mymul(vecMat, vecMat, outputVecMat);

    return 0;
}