简体   繁体   English

Mat数据结构(数组)初始化错误

[英]Mat data structure(array) initialization error

I am writing a opencv code for particle filter but i am getting some error, i think it is because of the below code.How can i initialise the Mat array at the time of declaration itself? 我正在为粒子过滤器编写一个opencv代码,但是出现了一些错误,我认为是由于下面的代码。在声明本身时如何初始化Mat数组?

Mat particle[N];
for (int i = 0; i < N; i++)
    {
        particle[i].at<float>(0, 0) = rec.x + distribution(generator);//x
        particle[i].at<float>(1, 0) = rec.y + distribution(generator);//y
        particle[i].at<float>(2, 0) = 0;//vel(x)
        particle[i].at<float>(3, 0) = 0;//vel(y)
        particle[i].at<float>(4, 0) = min(0.66 + abs(rng.uniform(0, 1)), MAX_a);//a
        particle[i].at<float>(5, 0) = rec.height + 10 + rng.uniform(0, 1);//vel(h)
        weight[i] = 1.0 / N;
    }

Why don't you use std::vector: 为什么不使用std :: vector:

std::vector<cv::Mat> particle(N, cv::Mat(6, 1, CV_32F)); // constructor which takes
// number of elems and allocates memory of them using second argument as a prototype object
for (int i = 0; i < N; i++)
    {
        particle[i].at<float>(0, 0) = rec.x + distribution(generator);//x
        particle[i].at<float>(1, 0) = rec.y + distribution(generator);//y
        particle[i].at<float>(2, 0) = 0;//vel(x)
        particle[i].at<float>(3, 0) = 0;//vel(y)
        particle[i].at<float>(4, 0) = min(0.66 + abs(rng.uniform(0, 1)), MAX_a);//a
        particle[i].at<float>(5, 0) = rec.height + 10 + rng.uniform(0, 1);//vel(h)
        weight[i] = 1.0 / N;
    }

We have used following constructor: 我们使用了以下构造函数:

explicit vector (size_type n, const value_type& val = value_type(), const allocator_type& alloc = allocator_type()); 显式向量(size_type n,const value_type&val = value_type(),const allocator_type&alloc = allocator_type());

which Constructs a container with n elements. 构造一个包含n个元素的容器。 Each element is a copy of val. 每个元素都是val的副本。 ( reference) 参考)

And yes, you had a trouble with previous attempt due to built-in array of Mat's objects does not initialize them to proper sizes, what vector's constructor does. 是的,由于Mat对象的内置数组无法将它们初始化为适当的大小(矢量构造函数会进行初始化),因此您在以前的尝试中遇到了麻烦。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM