2014-10-25 3 views
0

Я новичок JavaCV. Я пытаюсь обработать K-средства на изображении. Тем не менее, я получил ошибку времени выполнения из следующего кода. Я не знаю, как его решить и успешно обработать K Means. Спасибо за вашу помощь.JavaCV K Mans Runtime Error

Это ошибка:

OpenCV Error: Assertion failed (labels.isContinuous() && labels.type() == CV_32S && 
(labels.cols == 1 || labels.rows == 1) && labels.cols + labels.rows - 1 == data.rows) in 
cvKMeans2 

Это мой JavaCV код:

import static org.bytedeco.javacpp.opencv_core.*; 
import static org.bytedeco.javacpp.opencv_highgui.*; 
import org.bytedeco.javacv.CanvasFrame; 

public class KMeansTest { 
public static void runTest(){ 
    IplImage image = cvLoadImage("img/2014-05-18_181424.png"); 
    CvMat model = image.asCvMat(); 

    //Number of cluster 
    int k=2; 
    CvMat cluster = model.clone(); 

    cvKMeans2(model, k, cluster, cvTermCriteria(CV_TERMCRIT_EPS + CV_TERMCRIT_ITER, 10, 1.0)); 

    CanvasFrame canvas = new CanvasFrame("My Image", 1); 
    canvas.setDefaultCloseOperation(javax.swing.JFrame.EXIT_ON_CLOSE); 
    canvas.showImage(cluster.asIplImage()); 
} 
} 

ответ

0

Вы должны убедиться, что все условия Утверждающие истинны.

(labels.isContinuous() & & labels.type() == CV_32S & & (labels.cols == 1 || labels.rows == 1) & & labels.cols + labels.rows - 1 == data.rows)

Здесь этикетки относится ваш модель, поэтому вам нужно убедиться, что все свойства были правильно установлены, прежде чем передал его в функцию cvKMeans2.

Доступ к каждому свойству и просмотр того, кто вызывает ошибку.

Simple System.out.println ("Тип:" + модель .type()); сделал бы.

Я ясно вижу, что ваш model.type() не CV_32S, так как вы клонировали его из IplImage непосредственно в формате по умолчанию IPL_DEPTH_8U, преобразуете его в IPL_DEPTH_32S. Аналогичным образом, выясните один за другим.

С уважением.