【发布时间】:2014-03-30 02:37:48
【问题描述】:
页面底部是我运行的整个代码以供参考。我正在尝试将vector<Mat> 包装在C 中,我已经将vector<Point2f> 包装在C 中,并且我将vector<Mat> 包装相同。 Point2f 版本运行良好,但 Mat 版本出现 Segmentation Fault 错误(核心转储)。
这是我的矢量包装器:
vector_Point2f* std_carrayTovectorp2f(Point2f* a, size_t len) {
vector<Point2f>* v = new vector<Point2f>;
for(size_t i = 0; i < len; i++)
v->push_back(a[i]);
return v;
}
这是我的矢量包装器:
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;
}
看到它们都被包裹起来了。我需要保持Mat* a 输入参数和vector_Mat* 返回相同。加上保持相同的功能,其他一切都可以改变。任何帮助表示赞赏。
整个代码:
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/highgui/highgui_c.h>
#include <stdio.h>
#include <iostream>
using namespace std;
using namespace cv;
typedef vector<Point2f> vector_Point2f;
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;
}
vector_Point2f* std_carrayTovectorp2f(Point2f* a, size_t len) {
vector<Point2f>* v = new vector<Point2f>;
for(size_t i = 0; i < len; i++)
v->push_back(a[i]);
return v;
}
int main()
{
Mat* m, n, o;
vector_Mat* v = std_carrayTovectorm(m, 1);
cout << v;
}
【问题讨论】:
-
我确定您动态分配矢量对象是有原因的。就像您使用不确定的参数
m调用std_carrayTovectorm一定是有原因的。我只是想不出任何一个的原因。 -
@WhozCraig...你能告诉我我到底哪里错了吗?