使用Java在OpenCV中使用K-means聚类像素

时间:2014-03-10 08:27:29

标签: java opencv k-means

我目前正在尝试开发Android应用。我试图将一张叶子的图像从RBG转换为HSV,以产生一个饱和值空间(没有色调)的图像。接下来,我尝试使用K-means生成一个图像,它应该显示蓝色作为背景,绿色表示叶子(前景对象)。

但是,我不知道在OpenCV中使用K-means功能后如何显示图像。

    Imgproc.cvtColor(rgba, mHSV, Imgproc.COLOR_RGBA2RGB,3);
    Imgproc.cvtColor(rgba, mHSV, Imgproc.COLOR_RGB2HSV,3);
    List<Mat> hsv_planes = new ArrayList<Mat>(3);
    Core.split(mHSV, hsv_planes);


    Mat channel = hsv_planes.get(2);
    channel = Mat.zeros(mHSV.rows(),mHSV.cols(),CvType.CV_8UC1);
    hsv_planes.set(2,channel);
    Core.merge(hsv_planes,mHSV);



    Mat clusteredHSV = new Mat();
    mHSV.convertTo(mHSV, CvType.CV_32FC3);
    TermCriteria criteria = new TermCriteria(TermCriteria.EPS + TermCriteria.MAX_ITER,100,0.1);
    Core.kmeans(mHSV, 2, clusteredHSV, criteria, 10, Core.KMEANS_PP_CENTERS);

使用k-means后,我该怎么做才能显示图像?

1 个答案:

答案 0 :(得分:3)

This Java class在OpenCV的官方Java包装器中实现了k-means颜色聚类算法的完整功能示例。

尽管上面提到的实现是在RGB颜色空间中的图像上执行的,但它是一个非常好的例子,可以在Java上对OpenCV中的k-means进行一般性理解,并且您可以轻松扩展它以使其在HSV空间中工作