2

我正在尝试创建一个矩阵,其列包含其他矩阵行的数据。但是,我的编译器告诉我,没有这样的功能,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
4

1 回答 1

1

检查返回的错误消息,可能的允许覆盖都不是copyTo()很好的匹配。

两个参数覆盖显然是行不通的。单个参数覆盖似乎需要一个非常量引用作为复制目标(这在考虑它时当然是有意义的)。也就是说,data.col(0)并且data.col(1)似乎正在返回 const 引用,这些引用不可写,因此也不是很好的匹配。

您可能必须使用中间对象,然后是数据列的设置器,除非data可以返回对您希望成为复制目标的对象的可写引用。

祝你好运。

于 2013-04-08T12:56:49.677 回答