2013-07-24 4 views
0

J'utilise opencv-2.4.6 et j'essaie d'exécuter un programme simple pour utiliser la fonctionnalité cv::linemod.opencv linemod lancer des erreurs d'exécution

Voici mon code:

#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; 
} 

qui compile bien, mais lors de l'exécution je reçois cette erreur:

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 

Je ne comprends pas vraiment ce que cela signifie? J'utilise la dernière version d'opencv

Répondre

1

Je ne suis pas familier avec l'algorithme. Mais le message d'erreur apparaît parce que vous utilisez un format matriciel qui n'est pas supporté par les fonctions morphologiques d'OpenCV.

Il semble que seuls CV_8U, CV_16U, CV_16S et CV_32F soient supportés.

-t-il résoudre votre problème si vous ajoutez

object_mask.convertTo(object_mask, CV_8U); 

avant d'appeler la fonction addTemplate?

+0

Vous êtes un sauveur, je voudrais +2 si je pouvais – Aly