JavaCV K表示运行时错误

时间:2014-10-25 07:20:49

标签: java opencv k-means javacv

我是JavaCV的初学者。我正在尝试在图像上处理K Means。但是,我从以下代码中得到了运行时错误。我不知道如何解决它并成功处理K Means。谢谢你的帮助。

这是错误:

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());
}
}

1 个答案:

答案 0 :(得分: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());会做的。

我可以清楚地看到你的model.type()不是CV_32S,因为你直接从IplImage克隆它的默认格式为IPL_DEPTH_8U,将其转换为IPL_DEPTH_32S。同样,逐一弄清楚。

问候。