c++ - 在 OpenCV 中计算码本

标签 c++ opencv

有些问题指的是同样难以理解的异常,但我想用一个最小的例子问清楚。

我有以下代码:

  • 从文件中加载所有 SIFT 描述符;
  • 规范化描述符,例如它们是 CV_32F;

然后:

  • 初始化 BowTrainer(代码基于在线找到的示例):

    TermCriteria tc(CV_TERMCRIT_ITER,100,0.001);
    int retries=1;
    int flags=KMEANS_PP_CENTERS;
    BOWKMeansTrainer bow_trainer(dictionary_size, tc, retries, flags);
    

最后:

   vocabulary = bow_trainer.cluster(training_descriptors); 

哪里training_descriptors1218772 * 128 CV_32F 矩阵包含 0,1 归一化 SIFT 描述符。

不幸的是cluster生成异常说:

OpenCV Error: Assertion failed (data.dims <= 2 && type == CV_32F && K > 0) in kmeans, file /Users/u/Downloads/OpenCV-2.4.4/modules/core/src/matrix.cpp, line 2686

矩阵的类型是正确的,即CV_32F我不明白谁的 data.dims 应该 <=2 以及为什么它看起来像 K <= 0。

最佳答案

巧合的是,我也遇到了同样的错误。就我而言,这是因为描述符 Mat 中的元素为零。我怀疑这就是 data.dims <= 2 所指的。

OpenCV Error: Assertion failed (data.dims <= 2 && type == CV_32F && K > 0) in kmeans, file /home/ubuntu/opencv-2.4.5/modules/core/src/matrix.cpp, line 2686

您是否检查过您的描述符数组不为空?

关于c++ - 在 OpenCV 中计算码本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16335931/

相关文章:

c++ - OpenCV 中的错误 ROI 图像

c++ - "Builder"函数模板

c++ - makefile 或代码块 TO eclipse on ubuntu

c++ - OpenCV - cudaimgproc 错误

python - 在另一个图像上匹配轮廓或绘制 (png) 轮廓

c++ - 拉普拉斯滤波器 opencv c++

c++ - 试图了解 Lineiterator 的用法

c++ - 如何跳出这个 do-while 循环?

c++ - 构建 Boost Coroutine2

c++ - 使用 Chromium 作为 MFC CWnd