在创建指向 Mat 向量的指针时,表达式列表被视为初始化程序中的复合表达式

StackOverflow https://stackoverflow.com//questions/23044157

  •  21-12-2019
  •  | 
  •  

我在这一行收到以下错误消息 vector<Mat> *std_carrayTovectorm(m, 2); 当尝试创建一个 C 数组来提供给我的函数时,该函数将 Mat 的 C 数组转换为 C++ 向量。我认为我的代码是正确的,但不确定它是否是我的 std_carrayTovectorm 函数就是问题所在。我如何编辑我创建的 C 数组或 std_carrayTovectorm 函数从 C 数组创建 Mat 的向量。

谢谢

//表达式列表被视为初始化器中的复合表达式//从“ int”到'std :: vector*'的转换无效

typedef vector<Mat> vector_Mat;

    vector_Mat* std_carrayTovectorm(Mat* a, size_t len) {
        vector<Mat>* v = new vector<Mat>;
        for(size_t i = 0; i < len; i++) 
            v->push_back(a[i]);
        return v;
    }


    int main( int argc, char** argv )
    {

        Mat img1 = imread( "/home/w/d1");
        Mat img2 = imread( "/home/w/d1");

        Mat* m[2] = { new Mat (img1), new Mat (img2) };
        vector<Mat> *std_carrayTovectorm(m, 2);

        return 0;
    }    
有帮助吗?

解决方案

关于指针存在一些问题......并且您将函数的原型粘贴到 main 中,却忘记删除返回类型!

这是一个修改后的程序,可以让您回到正确的轨道。注意我修改了 vector_Mat 指向一个向量的指针 Mat...

#include<iostream>
#include<cmath>

#include<opencv2/imgproc/imgproc.hpp>
#include<opencv2/highgui/highgui.hpp>
#include <opencv2/core/core.hpp>
using namespace std;
using namespace cv;

typedef vector<Mat*> vector_Mat;

vector_Mat* std_carrayTovectorm(Mat** a, size_t len) {
    vector_Mat* v = new vector_Mat();
    for(size_t i = 0; i < len; i++) 
        v->push_back(a[i]);
    return v;
}


int main( int argc, char** argv )
{

    Mat img1 = imread( "one.jpg");
    Mat img2 = imread( "two.jpg");

    Mat* m[2] = { &img1, &img2 };
    vector_Mat* v=std_carrayTovectorm(m, 2);

    imwrite("three.jpg",*((*v)[0]));
    imwrite("four.jpg",*((*v)[1]));
            delete v;
    return 0;
}    

再见,

编辑 :不修改 vector_Mat :

#include<iostream>
#include<cmath>

#include<opencv2/imgproc/imgproc.hpp>
#include<opencv2/highgui/highgui.hpp>
#include <opencv2/core/core.hpp>
using namespace std;
using namespace cv;

typedef vector<Mat> vector_Mat;

vector_Mat* std_carrayTovectorm(Mat** a, size_t len) {
    vector_Mat* v = new vector_Mat();
    for(size_t i = 0; i < len; i++) 
        v->push_back(*a[i]);
    return v;
}


int main( int argc, char** argv )
{

    Mat img1 = imread( "one.jpg");
    Mat img2 = imread( "two.jpg");

    Mat* m[2] = { &img1, &img2 };
    vector_Mat* v=std_carrayTovectorm(m, 2);

    imwrite("three.jpg",((*v)[0]));
    imwrite("four.jpg",((*v)[1]));

    delete v;
    return 0;
} 

再见,

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top