一个std :: vector的cv :: Mat ...我该怎么办? [英] a cv::Mat of std::vector ... how do I?

查看:176
本文介绍了一个std :: vector的cv :: Mat ...我该怎么办?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试创建一个openCV矩阵,其中矩阵的每个元素都是一个std :: vector ...但我似乎无法使其正常工作.这是我在做什么:

I'm trying to create an openCV matrix where each element of the matrix is a std::vector... but I can't seem to get it to work. Here's what I'm doing:

cv::Mat_<std::vector<double> > costVol(3,5);
std::vector<double> slice0;
slice0.push_back(8.0);
costVol(0,1)=slice0;

整个代码可以编译,但是成本为Vol(0,1)= slice0;它将引发内存访问错误.我猜这是因为矩阵未正确初始化...有人可以告诉我如何正确初始化cv :: Mat costVol.理想情况下,我希望将其初始化为一个空向量,或者甚至将一个大小为矢量的向量初始化为5,默认情况下所有元素为0.

The entire code compiles but at costVol(0,1)=slice0; it throws a memory access error. I'm guessing this is because the matrix has not been initialized properly... can somebody tell me how to initialize the cv::Mat costVol properly. I'd ideally like it to be initialized to an empty vector or even a vector of size lets say 5 with all elements 0 by default.

推荐答案

我不确定您可以通过这种方式执行此操作-而且我很确定您不想这样做!

I'm not sure that you can do this in this way - AND I'm pretty sure you don't want to!

cv :: Mat用于存储一些预定义的内置类型的一维或二维数组,以进行图像处理.您可以让它使用自己的外部存储(可以在矢量中)存储实际数据并使用其映射功能-但是您只能对与其预定义的内置范围相匹配的类型执行此操作.

cv::Mat is intended to store a 1 or 2 dimensional array of a few predefined built in types for image processing. You can have it use your own external storage (which can be in a vector) for the actual data and use it's mapping functions - but you can only do this for types that match it's range of predefined built-ins.

例如

std::vector<double> myData;

// fill with 100 items
myData.push_back(.....);

// create a 10x10 cv::Mat pointing at the 100 elements of myData
cv::Mat matrix(10,10,CV_32FC1,&myData.front()); 

您打算做什么?

这篇关于一个std :: vector的cv :: Mat ...我该怎么办?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆