【发布时间】:2014-08-17 20:33:22
【问题描述】:
我正在使用普通贝叶斯分类器训练 SIFT BOW 描述符。我的训练数据有 79 行,每行代表一个样本和 500 列。响应数据有 79 行和 1 列。 varIdx 和 sampleIdx 为 0 且 update=true。
CvNormalBayesClassifier 分类器=新 CvNormalBayesClassifier();
CvMat val1 =cvCreateMat(1,1,CV_8U);
双[] myarr1=新双[1];
myarr1[0]=0.0;
val1.put(myarr1);
CvMat val2 =cvCreateMat(1,1,CV_8U);
双[] myarr2=新双[1];
myarr2[0]=0.0;
val2.put(myarr2);
分类器.train(训练数据,标签,val1,val2,真);
错误:
OpenCV 错误:输入参数的大小不匹配(组件掩码应包含与输入变量总数一样多的元素)在 cvPreprocessIndexArray,文件 ..\..\..\..\opencv\modules\ml\src\ inner_functions.cpp,第 426 行 线程“main”中的异常 java.lang.RuntimeException: ..\..\..\..\opencv\modules\ml\src\inner_functions.cpp:426: error: (-209) 组件掩码应该包含尽可能多的元素作为函数 cvPreprocessIndexArray 中输入变量的总数 在 com.googlecode.javacv.cpp.opencv_ml$CvNormalBayesClassifier.train(本机方法) 在 com.cis.project.Recognition.main(Recognition.java:74)什么是组件掩码?
【问题讨论】:
-
不知道 javacv (为什么你不使用 opencv 自己的 java 绑定?)但是你要么必须为 varidx 和 sampleidx 传递一个 empty Mat ,或者一个具有相同的形状作为标签。 (另外,使用 svm 可能会得到更好的结果)
-
对于使用 opencv 的 svm,即 CvSVM 也同样的错误。这个组件掩码是什么错误?
-
从 StatModel 继承的 所有 类将出现相同的错误。