- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
所以,我要训练一个分类器,需要将分类器的结果保存在 mexopencv 中。
hello = cv.SVM;
hello.save('foo.xml')
我的 Matlab 编译器由于段错误而崩溃。 As far as I know这应该是 OpenCV 中的方式。有没有其他方法可以将通过 SVM
训练的文件保存在 mexopencv
中;或者这与 Matlab 文件写入选项有关。谢谢。
最佳答案
这实际上是 OpenCV 本身的错误,而不是 mexopencv。你应该report it ...
这是重现错误的最小 C++ 程序:
#include "opencv2/opencv.hpp"
#include "opencv2/ml/ml.hpp"
using namespace cv;
int main()
{
Ptr<SVM> svm = new SVM();
svm->save("svm.xml");
return 0;
}
在调试器下运行它,我 located违规代码:
df_count = class_count > 1 ? class_count*(class_count-1)/2 : 1;
df = decision_func;
cvStartWriteStruct( fs, "decision_functions", CV_NODE_SEQ );
for( i = 0; i < df_count; i++ )
{
int sv_count = df[i].sv_count;
...
}
此时SVM模型是未经训练的,df
是一个未初始化的指针。 class_count
等于 0
,但 df_count
设置为 1
,因此 df[i]
(i=0
)导致访问冲突...
我认为这可以修复为:
df_count = class_count > 1 ? class_count*(class_count-1)/2 : 1;
if (class_count == 0) df_count = 0;
在调试过程中将df_count
更改为0
,程序运行正常,我得到以下XML文件:
<?xml version="1.0"?>
<opencv_storage>
<my_svm type_id="opencv-ml-svm">
<svm_type>C_SVC</svm_type>
<kernel>
<type>RBF</type>
<gamma>1.</gamma>
</kernel>
<C>1.</C>
<term_criteria>
<epsilon>1.1920928955078125e-007</epsilon>
<iterations>1000</iterations>
</term_criteria>
<var_all>0</var_all>
<var_count>0</var_count>
<sv_total>0</sv_total>
<support_vectors></support_vectors>
<decision_functions></decision_functions>
</my_svm>
</opencv_storage>
现在,您可以通过先训练模型,然后再将其保存到文件来避免该错误:)
关于matlab - 如何在 mexopencv 中保存 svm 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20784648/
我正在尝试使用 mexopencv 在 Matlab 中提取二进制特征。如果我使用 ORB 作为检测器和提取器,一切正常。问题是当我尝试使用简要提取器时。这是我正在使用的代码: detector =
我试图通过在我的 Mac 上安装 mexopencv 来连接 Matlab 和 OpenCV,但出现以下错误消息: >> mexopencv.make make MATLABDIR="/Applica
我调用了一个使用 mexopencv 从 matlab 编译的 mex 文件。该程序在 matlab 中运行并且没有问题,但是当我使用 matlab deploytool 将 matlab 转换为 c
所以,我要训练一个分类器,需要将分类器的结果保存在 mexopencv 中。 hello = cv.SVM; hello.save('foo.xml') 我的 Matlab 编译器由于段错误而崩溃。
我的想法很简单。我正在使用 mexopencv 并试图查看我的电流中是否存在与我数据库中存储的任何图像匹配的任何对象。我正在使用 OpenCV DescriptorMatcher 函数来训练我的图片。
我是一名优秀的程序员,十分优秀!