【发布时间】:2014-07-15 07:56:58
【问题描述】:
我正在使用OpenCV的remap函数如下图:
Mat lg,lr;
Mat *mxl = (Mat *) cvLoad("mx1.xml");
Mat *myl = (Mat *) cvLoad("my1.xml");
remap(lg, lr, mxl, myl);
mx1和my1被加载为cv::Mat,但是remap需要cv::_InputArray,我该如何实现呢?
【问题讨论】:
我正在使用OpenCV的remap函数如下图:
Mat lg,lr;
Mat *mxl = (Mat *) cvLoad("mx1.xml");
Mat *myl = (Mat *) cvLoad("my1.xml");
remap(lg, lr, mxl, myl);
mx1和my1被加载为cv::Mat,但是remap需要cv::_InputArray,我该如何实现呢?
【问题讨论】:
cv::_InputArray 是 OpenCV 用来接受多种数据类型(如cv::Mat 或std::vector)作为输入的代理类型。您无需直接创建。
部分问题在于您试图混合使用 C 和 C++ API。不建议这样做。另一个因素是cv::Mat* 无法转换为InputArray。您可以使用cv::FileStorage 将您的文件读入cv::Mat 对象:
cv::Mat lg, lr;
cv::FileStorage fs1("mx1.xml", cv::FileStorage::READ);
cv::FileStorage fs2("mx2.xml", cv::FileStorage::READ);
cv::Mat mxl;
cv::FileNode fn = fs1.getFirstTopLevelNode();
fn >> mxl;
cv::Mat myl;
fn = fs2.getTopLevelNode();
fn >> myl;
cv::remap(lg, lr, mxl, myl, CV_INTER_LINEAR);
【讨论】: