OPENCV LINEMOD会引发匹配异常

Opencv linemod throws matching exception

本文关键字:异常 LINEMOD OPENCV      更新时间:2023-10-16

我想在OpenCV中使用lineMod。

我成功添加了一些模板,但是当我尝试进行一些匹配时,我会收到以下错误:

错误:cv :: lineMod :: LineMod :: Linearize,linearize,file ... opencv sie ces modules rgbd rgbd src src linemod.cpp>

所有图像的建议大小为800x600像素。

我的代码:

cv::Ptr<cv::linemod::Detector> detector = cv::linemod::getDefaultLINE();
cv::Mat color, mask;
std::vector<cv::Mat> images;
for (int i = 0; i < 419; i++)
{
    images.push_back(cv::imread("Resources/Train/" + std::to_string(i+1) + ".png", CV_LOAD_IMAGE_GRAYSCALE));
}
for (int i = 0; i < images.size(); i++)
{
    color = images[i];
    // Create image mask
    double thresh = 0;
    double maxValue = 255;
    // Binary Threshold
    cv::threshold(color, mask, thresh, maxValue, cv::THRESH_BINARY);
    std::vector<cv::Mat> sources;
    sources.push_back(color);
    // Extract template
    std::string class_id = cv::format("class%d", num_classes);
    cv::Rect bb;
    int template_id = detector->addTemplate(sources, class_id, mask, &bb);
    if (template_id != -1)
    {
        printf("*** Added template (id %d) for new object class %d***n",
                template_id, num_classes);
        //printf("Extracted at (%d, %d) size %dx%dn", bb.x, bb.y, bb.width, bb.height);
    }
    ++num_classes;
}
std::vector<cv::Mat> sources;
sources.push_back(cv::imread("Resources/Train/1.png", CV_LOAD_IMAGE_GRAYSCALE));
std::vector<cv::linemod::Match> matches;
std::vector<cv::String> class_ids;
std::vector<cv::Mat> quantized_images;
detector->match(sources, 80, matches, class_ids, quantized_images); // ERROR
for (int i = 0; i < matches.size(); ++i)
{
    cv::linemod::Match m = matches[i];
    printf("Similarity: %5.1f%%; x: %3d; y: %3d; class: %s; template: %3dn", m.similarity, m.x, m.y, m.class_id.c_str(), m.template_id);
}

detector->match(sources, 80, matches, class_ids, quantized_images);

上丢弃的错误

我知道它真的很晚了,您已经解决了它(有点(。但是对于其他会偶然发现同一问题的人..

cv::linemod::getDefaultLINE()谨慎地包含2个金字塔水平,5和8。但是对于金字塔8的水平,进行了pyrDown(本质上是一个比例为2(。

说图像的大小应该是5和16的倍数(对于pymaid级别的量度为8的倍数降低了2个(,即80 的倍数。这就是错误来自(600不是80的倍数(。

好吧,我设法自己解决了。这些模板需要是尺寸为800x600像素的灰度图像,而我想要匹配的图像需要是800x800像素的3通道颜色图像。真的很困惑...最后,算法确实很糟糕。所以我最终没有使用它。