2017-08-08 89 views
0

我试图用EM :: predict2(sample,probs)来预测一个像素是不是叶子的一部分;然而,我发现了错误:Android Opencv EM致命错误

CvException [org.opencv.core.CvException: cv::Exception: /build/master_pack-android/opencv/modules/ml/src/em.cpp:569: error: (-215) sample.size() == Size(means.cols, 1) in function cv::Vec2d cv::ml::EMImpl::computeProbabilities(const cv::Mat&, cv::Mat*, int) const]

当我打电话:

Mat mPredict = new Mat(1, 1, CvType.CV_8UC1); 
Mat mLabel = new Mat(1, 1, CvType.CV_8UC1); 
mPredict.put(0,0,imgHSV.get(i,j)[1]); 
mLabel.put(0,0,imgHSV.get(i,j)[2]); 

double[] probabilities = em.predict2(mPredict, mLabel); 

为了澄清一些观点,我表示我试图按照下面的伪代码:

stackedPixels ← ∅ 
for all pixelRow in image do 
    for all pixel in pixelRow do 
     stackedPixels ← stackedPixels ∪ pixel 
    end for 
end for 
EM ← OpenCV.EM(nClusters = 2, covMatT ype = OpenCV.DIAGONAL) 
EM.train(stackedPixels) 
return EM 


key ← hash(pixel[S], pixel[V]) 
if hash in pixelDictionary then 
    return pixelDictionary[key] 
end if 
probabilities ← EM.predict(pixel[S], pixel[V]) 
pixelDict[key] = probabilities[0] > probabilities[1] 
return pixelDict[key] 

回答

0

什么版本的opencv?他们最近改变了方法。 也许你可以先试试这个吗?这是基于v3.1.0 https://github.com/sonnyky/OpenCVEM

我正在玩OpenCV EM,并设法让它在n个群集内对像素进行分类。它仍在继续工作,所以原谅凌乱的代码:)

+0

我使用的是v3.2.0。但是,我要去看看它是否可以帮助我! – Tarcisiofl