【导读】本文是专栏《计算机视觉40例简介》的第20个案例《K均值聚类实现艺术画》。该专栏简要介绍李立宗主编《计算机视觉40例——从入门到深度学习(OpenCV-Python)》一书的40个案例。 目前,该书已经在电子工业出版社出版,大家可以在京东、淘宝、当当等平台购买。 大家可以在公众号“计算机视觉之光”回复关键字【案例20】获取本文案例的源代码及使用的测试图片等资料。 针对本书40个案例的每一个案例,分别录制了介绍视频。如果嫌看文字版麻烦,可以关注公众号“计算机视觉之光”直接观看视频介绍版。 本文简要介绍了本案例的一些基础知识,更详细的理论介绍、代码实现等内容请参考《计算机视觉40例简介》第20章《K均值聚类实现艺术画》以获取更详细信息。 |
张伯伯在镇上卖菜,他的菜都是精心种植的,新鲜又便宜,镇上的人都喜欢去他的摊位买菜。张伯伯在镇上卖了几十年的菜,镇子的规模越来越大,大家去他那里买菜的距离越来越远。张伯伯年纪也越来越大了,于是,他决定让自己的四个儿子继承自己的事业,每个人在镇上选一个地点卖菜。
第1天,四兄弟随机在镇子的东、南、西、北四个方向各选了一个位置。镇上的居民知道后,都就近选择距离自己最近的摊位去买菜。四兄弟一边卖菜,一边问大家都住在哪里,判断大家来买菜的路程。
第2天,四兄弟都选择了前一天来自己摊位买菜人们的相对中间的位置,希望更多的人能够在更近的距离买到菜。镇上居民根据兄弟们的广播知道四个兄弟调整了摊位的位置,又都选择了距离自己最近的一个摊位去买菜(部分人选择的摊位会与第1天有差异)。四兄弟,还是像第1天一样,一边卖菜,一边问大家都住在哪里,判断大家来买菜的路程。
第3天,四兄弟又把摊位调整到距离前一天来自己摊位买菜的所有人的中间位置。大家知道后,还是就近选择一个摊位去买菜。四兄弟,还是记住大家的路程,方便明天继续调整。
有一天,四兄弟发现计算出来的新位置和前一天的位置是一致的,都已经在距离来自己摊位买菜的居民最中间的位置上了。好了,以后四兄弟就一直在这固定的摊位上卖菜了。
上述就是K均值聚类(Kmeans)的基本思想。其中的K表示分组的个数,本例中K的值等于4,如果张伯伯有两个儿子,可以让K=2,该算法同样能够帮他们找到各自的最优位置。
K均值聚类不需要过多的外部数据和干预,就能够自动地将数据划分为K个分组,并能够获取各个分组的中心位置。
OpenCV中提供了直接实现K均值聚类的函数cv2.kmeans(),通过该函数能够直接实现K均值聚类。本章中,我们通过该函数让一幅图像呈现出艺术画效果如图1所示。
图1 艺术画效果
本案例的主要内容如图2所示。
图2 主要内容
在《计算机视觉40例——从入门到深度学习(OpenCV-Python)》一书中,从算法原理、实现流程等角度系统深入地介绍了该案例的理论基础和实现过程,并对具体的代码实现进行了细致的介绍与解释。欢迎大家阅读第20章《K均值聚类实现艺术画》获取详细内容。
《计算机视觉40例——从入门到深度学习(OpenCV-Python)》在介绍Python基础、OpenCV基础、计算机视觉理论基础、深度学习理论的基础上,介绍了计算机视觉领域内具有代表性的40个典型案例。这些案例中,既有传统的案例(数字识别、答题卡识别、物体计数、缺陷检测、手势识别、隐身术、以图搜图、车牌识别、图像加密、指纹识别等),也有深度学习案例(图像分类、风格迁移、姿势识别、实例分割等),还有人脸识别方面的案例(表情识别、驾驶员疲劳监测、识别性别与年龄等)。