将cv :: Mat数组传递给C中的函数

时间:2014-01-09 16:47:31

标签: arrays function vector

我现在遇到这个问题几天了,我无法找到解决办法。

我正在尝试存储一个cv :: Mats的数组,到目前为止,我这样做的方式是 std::vector<cv::Mat> store_frames(32);每次我只是使用frame.copyTo(store_frames[i])将新框架复制到其所在位置。 如果它在main内部,但是如果我想将它传递给一个函数并做同样的事情它就不再好了,这样可以正常工作。 我用简单的垫子没有同样的问题。我只是在标题内全局声明它们 cv::Mat frame;

如果我有一个功能:

void function( cv::Mat &f1 ) {
..
f1.at<float>(10,10) += 100;
..
}

然后调用函数function(frame); 将保存函数内的所有更改。所以我想说我会有像

这样的东西
...
for(int i=0; i<5; i++) {
function(frame);
std::cout<<frame.at<float>(10,10)<<' ';
}

输出(假设frame.at(10,10)的初始值为 100 200 300 400 500

问题现在是我不能用std :: vector store_frames做同样的事情。首先,如果我尝试以同样的方式在标题中声明它std::vector<cv::Mat> store_frames(32);我在第32号上遇到Error: expected a type specifier的错误。如果我只是说std::vector<cv::Mat> store_frames;那么它就不会知道它的大小。我看到某些人打电话store_frames.resize我试图这样做,但我收到错误this declaration has no storage class or type specifier。我已经在互联网上寻找解决方案,但没有找到任何解决方案。我知道问题本身可能听起来很愚蠢,但我是新手,我不太了解。

所以我的问题是如何声明这个向量,以便可以将它传递给函数,在里面修改它并保存修改?

谢谢!

1 个答案:

答案 0 :(得分:1)

尝试

  1. 在标题中声明std::vector<cv::Mat> store_frame;,在源代码中声明store_frame.resize(32);

  2. 在源代码中使用std::vector<cv::Mat> store_frames(32);

  3. ps:我刚刚将其添加为评论。 :)