我是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());
}
}
答案 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。同样,逐一弄清楚。
问候。