سؤال

I am currently trying to develop an Android app. I have tried to convert an image of a leaf from RBG to HSV to produce an image which is in saturation-value space (without hue). Next, I tried to use K-means to produce a image where it should display blue as background and green for the leaf (foreground object).

However, I do not know how to display the image after using the K-means function in OpenCV.

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

What should I do to display the image after using k-means?

هل كانت مفيدة؟

المحلول

This Java class implements a fully functional example of the k-means color clustering algorithm in the official Java wrapper for OpenCV.

Although the mentioned implementation is performed over an image in the RGB color space, it is a very good example for a general understanding of k-means in OpenCV on Java and you could easily extend it to make it work in the HSV space.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top