2013-04-07 111 views
2

我试图创建一个矩阵,其列包含其他矩阵行的数据。然而,我的编译器告诉我,虽然它的编号为in the docs,但它没有像Mat::copyTo(Mat)这样的函数,我的IDE自动完成它(意味着它在标题中,并且标题包含在其中)。将一个矩阵复制到另一个列中

binary.row(selectedRow).reshape(1).copyTo(data.col(0)); 
reduced.row(selectedRow).reshape(1).copyTo(data.col(1)); 

任何想法为什么会失败?我厌倦了OpenCV的InputArray/OutputArray风格,我希望他们只是将方法签名与实际期望的方法匹配,而不是依赖编译时/运行时错误。

编辑:我知道我可以只运行一个for环和复制数据,并用它做,但应该有一个简单的方法来做到这一点使用OpenCV的方法。

EDIT2:这里是实际的错误:

/usr/include/opencv2/core/core.hpp:1651:10: note: void cv::Mat::copyTo(cv::OutputArray) const 
/usr/include/opencv2/core/core.hpp:1651:10: note: no known conversion for argument 1 from 'cv::Mat' to 'cv::OutputArray {aka const cv::_OutputArray&}' 
/usr/include/opencv2/core/core.hpp:1653:10: note: void cv::Mat::copyTo(cv::OutputArray, cv::InputArray) const 
/usr/include/opencv2/core/core.hpp:1653:10: note: candidate expects 2 arguments, 1 provided 
+1

究竟是什么错误? – 2013-04-07 18:03:34

+0

您是否告诉编译器在哪里搜索头文件?你有没有告诉你的编译器有关其他头文件? – 2013-04-07 18:29:07

+0

您是否尝试*阅读*链接的文档? 'CopyTo'不会将'Mat'作为参数;它需要一个'OutputArray'。 – WhozCraig 2013-04-07 18:48:36

回答

1

检查返回的错误讯息,既不copyTo()可能允许覆盖的似乎是一个很好的匹配。

双参数覆盖显然不起作用。单参数覆盖似乎需要一个非const引用作为复制目标(这在考虑它时肯定有意义)。也就是说,data.col(0)data.col(1)似乎是返回const引用,它们不可写,因此也不是很好的匹配。

除非data可以返回一个可写入的对象,否则您可能必须使用中间对象,然后是数据列的setter,除非您希望成为您的副本目标。

祝你好运。

相关问题