【问题标题】:JavaCV K Means Runtime ErrorJavaCV K 表示运行时错误
【发布时间】:2014-12-21 00:22:31
【问题描述】:

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

这是错误:

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

【问题讨论】:

    标签: java opencv k-means javacv


    【解决方案1】:

    您需要确保所有的断言条件都为真。

    (labels.isContinuous() && labels.type() == CV_32S && (labels.cols == 1 || labels.rows == 1) && labels.cols + labels.rows - 1 ==数据行)

    这里的 labels 指的是您的 model,因此您需要确保在将其传递给 cvKMeans2 函数之前正确设置所有属性。

    访问每个属性,看看是哪一个导致了错误。

    简单 System.out.println("Type :" + model .type());会的。

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

    问候。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-03-08
      • 2016-09-21
      • 1970-01-01
      • 2011-10-02
      • 2019-11-13
      • 1970-01-01
      • 2014-04-24
      • 1970-01-01
      相关资源
      最近更新 更多