2013-07-26 50 views
1

我使用的OpenCV的remap功能,如下圖所示:使用重映射功能的OpenCV 2.3.1

Mat lg,lr; 
Mat *mxl = (Mat *) cvLoad("mx1.xml"); 
Mat *myl = (Mat *) cvLoad("my1.xml"); 
remap(lg, lr, mxl, myl); 

mx1my1加載爲cv::Mat,但remap需求cv::_InputArray,我該如何實現這一目標?

回答

2

cv::_InputArray是OpenCV用來接受多種數據類型(如cv::Matstd::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); 
+0

使用OpenCV的2.4.8 - getTopLevelNode似乎已更名爲getFirstTopLevelNode。 – Kozuch