我目前正在尝试开发一个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后我该怎么显示图像?
这个Java类在OpenCV的官方Java包装器中实现了一个功能完整的k-means颜色聚类算法示例。
虽然上面提到的实现是在RGB色彩空间中的图像上执行的,但它是一个非常好的例子,用于一般理解Java上OpenCV中的k-means,并且您可以轻松地扩展它以使其在HSV空间中工作。