Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/136.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ opencv linemod引发运行时错误_C++_Opencv_Computer Vision - Fatal编程技术网

C++ opencv linemod引发运行时错误

C++ opencv linemod引发运行时错误,c++,opencv,computer-vision,C++,Opencv,Computer Vision,我正在使用opencv-2.4.6,并试图运行一个简单的程序来使用cv::linemod功能 这是我的密码: #include <opencv2/core/core.hpp> #include <opencv2/imgproc/imgproc_c.h> #include <opencv2/imgproc/imgproc.hpp> #include <opencv2/objdetect/objdetect.hpp>

我正在使用opencv-2.4.6,并试图运行一个简单的程序来使用
cv::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版本

我不熟悉该算法。但是出现错误消息是因为您使用的矩阵格式不受OpenCV形态学函数的支持

似乎只支持CV_8U、CV_16U、CV_16S和CV_32F

如果你加上

object_mask.convertTo(object_mask, CV_8U);

在您调用
addTemplate
函数之前?

您是一个救生员,如果可以,我会+2
object_mask.convertTo(object_mask, CV_8U);