2013-07-24 198 views
0

我正在使用opencv-2.4.6並試圖運行一個簡單的程序來使用cv::linemod功能。opencv linemod拋出運行時錯誤

這裏是我的代碼:

#include <opencv2/core/core.hpp> 
    #include <opencv2/imgproc/imgproc_c.h> 
    #include <opencv2/imgproc/imgproc.hpp> 
    #include <opencv2/objdetect/objdetect.hpp> 
    #include <opencv2/highgui/highgui.hpp> 

int main(int argc, char **argv) { 

    cv::Ptr<cv::linemod::Detector> detector; 
    detector = cv::linemod::getDefaultLINEMOD(); 

    Mat depth = imread("input/duck/duck_650_depth2.png", CV_LOAD_IMAGE_ANYCOLOR | CV_LOAD_IMAGE_ANYDEPTH); 
    Mat color = imread("input/duck/duck_650_rgb2.png", CV_LOAD_IMAGE_ANYCOLOR); 

    Mat object_mask = Mat(depth.rows, depth.cols, CV_32S); 

    for (int x = 0; x < depth.cols; x++) { 
     for (int y = 0; y < depth.rows; y++) { 
      if (depth.at<int16_t>(y, x) > 0) { 
       object_mask.at<int>(y, x) = 1; 
      } else { 
       object_mask.at<int>(y, x) = 0; 
      } 
     } 
    } 

    vector<Mat> sources; 
    sources.push_back(color); 
    sources.push_back(depth); 
    std::string class_id = cv::format("class%d", 1); 
    Mat display = color.clone(); 
    Rect bb; 

    int template_id = detector->addTemplate(sources, class_id, object_mask, &bb); 
    if (template_id != -1) { 
     cout << " added template " << endl; 
    } 
    return 0; 
} 

哪個編譯罰款,但在運行時我得到這個錯誤:

OpenCV Error: The function/feature is not implemented (Unsupported data type (=4)) in getMorphologyRowFilter, file /home/aly/libs/opencv-2.4.6.1/modules/imgproc/src/morph.cpp, line 894 
terminate called after throwing an instance of 'cv::Exception' 
    what(): /home/aly/libs/opencv-2.4.6.1/modules/imgproc/src/morph.cpp:894: error: (-213) Unsupported data type (=4) in function getMorphologyRowFilter 

我真的不明白這是什麼意思?我正在使用最新的opencv版本

回答

1

我對算法並不熟悉。但是會出現錯誤消息,因爲您正在使用OpenCV的形態函數不支持的矩陣格式。

似乎只支持CV_8U,CV_16U,CV_16S和CV_32F。

它是否解決你的問題,如果你添加

object_mask.convertTo(object_mask, CV_8U); 

調用addTemplate函數之前?

+0

你是救命的人,如果我可以的話我會+2 – Aly

相關問題