栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

OpenCV#11 Kmeans聚类的使用

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

OpenCV#11 Kmeans聚类的使用

程序运行逻辑

在进行聚类前,首先使用

Blur(src, src, new Size(15, 15));

对图形进行了均值滤波

为进行聚类,进行了如下几步操作

1、var columnVector = src.Reshape(cn: 3, rows: src.Rows * src.Cols);

将图形转变为3通道的单列矩阵

2、columnVector.ConvertTo(samples, MatType.CV_32FC3);

将矩阵转变成浮点矩阵

3、调用kmean函数,并查看不同参数k:2,4,5,8的效果

Cv2.Kmeans(
                    data: samples,
                    k: clustersCount,
                    bestLabels: bestLabels,
                    criteria:
                        new TermCriteria(type: CriteriaType.Eps | CriteriaType.MaxIter, maxCount: 10, epsilon: 1.0),
                    attempts: 3,
                    flags: KMeansFlags.PpCenters,
                    centers: centers);

4、读取生成矩阵bestLabel,并重写成和原图同类型矩阵

var clusteredImage = new Mat(src.Rows, src.Cols, src.Type());
                for (var size = 0; size < src.Cols * src.Rows; size++)
                {
                    var clusterIndex = bestLabels.At(0, size);
                    var newPixel = new Vec3b
                    {
                        Item0 = (byte)(centers.At(clusterIndex, 0)), // B
                        Item1 = (byte)(centers.At(clusterIndex, 1)), // G
                        Item2 = (byte)(centers.At(clusterIndex, 2)) // R
                    };
                    clusteredImage.Set(size / src.Cols, size % src.Cols, newPixel);
                }

5、图形显示。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/753283.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号