OPENCV LINEMOD会引发匹配异常
Opencv linemod throws matching exception
我想在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通道颜色图像。真的很困惑...最后,算法确实很糟糕。所以我最终没有使用它。
相关文章:
- 处理多个异常集合的C++方法
- 我在c++代码中生成了一个运行时#3异常
- 孤立代码块在结构中引发异常
- C++中的赋值发生,尽管右侧出现异常
- 从构造函数抛出异常时如何克服内存泄漏
- 异常属于C++中的线程还是进程
- 当类定义不可见时捕获异常
- 引发异常:读取访问冲突**dynamicArray**为0x1118235.发生
- 为什么异常不退出程序?
- 为什么我应该在异常处理中使用std::cerr而不是std::cout
- 如何修复链表类实现的未处理异常0xDDDDDDDD
- 关于:C++中异常对象的范围:为什么我没有得到副本?
- 是什么导致了Unity 3D中的"错误线程异常"?
- 如何将strftime中的格式错误作为异常捕获
- 创建具有 new in 函数和"this is nullptr"异常的对象
- 尝试使用智能指针时引发异常
- 函数如何通知用户它基于函数原型抛出异常?
- 是否值得降低我的代码的可读性,以便在出现内存不足错误时提供异常安全性?
- 当我使用 C++ 中的 C# dll 来使用 Selenium 时,存在异常处理问题
- OPENCV LINEMOD会引发匹配异常