在创建指向 Mat 向量的指针时,表达式列表被视为初始化程序中的复合表达式
题
我在这一行收到以下错误消息 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;
}
再见,
不隶属于 StackOverflow