OpenCV 图像分割实现Kmean聚类的示例代码

 更新时间:2022年03月28日 09:21:03   作者:山居秋暝LS  
本文主要介绍了OpenCV 图像分割实现Kmean聚类的示例代码,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

1 Kmean图像分割

按照Kmean原理,对图像像素进行聚类。
优点:此方法原理简单,效果显著。
缺点:实践发现对于前景和背景颜色相近或者颜色区分度差的图像效果不显著。
本文对图像进行滤波,主要是为了消除树枝颜色的影响(滤波为非Keman图像分割的必要操作)。

2 流程

(1)读入图片,把图片转化为二维。
(2)根据Kmean算法对图像分割,返回类别标签和各类别中心点。
(3)根据类别标签复制各类别中心点得到结果,在对结果调整到原有尺度。

3 实现

(1)图像分割前添加滤波,消除噪声

## 1 图像分割--Keman聚类
import cv2
import numpy as np
import matplotlib.pyplot as plt

# 1 读入图片
img0 = cv2.imread('bird.png', 1)  # (548,727,3)
img0 = cv2.cvtColor(img0, cv2.COLOR_BGR2RGB)
img_ = cv2.GaussianBlur(img0, (13, 13), 10, 10)
h, w, c = img_.shape
img_blur = img_.reshape([-1, 3])
img_blur = np.float32(img_blur)

# 2 分类
criteria = (
cv2.TERM_CRITERIA_EPS + cv2.TERM_CRITERIA_MAX_ITER, 10, 1.0)
num_clusters = 2
_, label, center_color = cv2.kmeans(img_blur, num_clusters,
                                    None, criteria,
                                    num_clusters,
                                    cv2.KMEANS_RANDOM_CENTERS)
center_color = np.uint8(
    center_color)  # img_blur[398396,3],label[398396,1],center[2,3]
res = center_color[label.ravel()]  # [398396,3]
res = res.reshape([h, w, c])  # res[668044,3]--> [548,727,3]

# 3 显示
plt.subplot(131)
plt.title('origin')
plt.imshow(img0)
plt.subplot(132)
plt.title('img_blur')
plt.imshow(img_)
plt.subplot(133)
plt.title('result')
plt.imshow(res)

plt.show()

在这里插入图片描述

(2)颜色区分低的情况
当颜色区分低时,划分较少的种类,可以达到满意效果。

## 1 图像分割--Keman聚类
import cv2
import numpy as np
import matplotlib.pyplot as plt

# 1 读入图片
img = cv2.imread('luna.png', 1)  # (548,727,3)
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
h, w, c = img.shape
img0= img.reshape([-1, 3])
img0 = np.float32(img0)

# 3 分类
criteria = (
cv2.TERM_CRITERIA_EPS + cv2.TERM_CRITERIA_MAX_ITER, 10, 1.0)
num_clusters = 2
_, label, center_color = cv2.kmeans(img0, num_clusters,
                                    None, criteria,
                                    num_clusters,
                                    cv2.KMEANS_RANDOM_CENTERS)
center_color = np.uint8(
    center_color)  # img_blur[398396,3],label[398396,1],center[2,3]
res = center_color[label.ravel()]  # [398396,3]

res = res.reshape([h, w, c])  # res[668044,3]--> [548,727,3]

plt.subplot(121)
plt.title('origin')
plt.imshow(img)
plt.subplot(122)
plt.title('result')
plt.imshow(res)

plt.show()

在这里插入图片描述

注: 可以改变中心点的数值,调整分割后图像的颜色。

center_color = np.uint8(
    center_color)  
## 调整显示颜色
center_color[0]=[0,0,255]
center_color[1]=[255,0,0]

res = center_color[label.ravel()] 

在这里插入图片描述

 到此这篇关于OpenCV 图像分割实现Kmean聚类的示例代码的文章就介绍到这了,更多相关OpenCV Kmean聚类内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • python标准库turtle海龟绘图实现简单奥运五环

    python标准库turtle海龟绘图实现简单奥运五环

    这篇文章主要为大家介绍了python使用turtle实现最简单简单奥运五环绘图,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-05-05
  • python高级内置函数用法实例

    python高级内置函数用法实例

    在本篇文章里小编给大家整理的是一篇关于python高级内置函数用法实例内容,有兴趣的朋友们可以学参考下。
    2021-09-09
  • pytorch加载的cifar10数据集过程详解

    pytorch加载的cifar10数据集过程详解

    这篇文章主要介绍了pytorch加载的cifar10数据集,到底有没有经过归一化,本文对这一问题给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2023-11-11
  • 使用python画社交网络图实例代码

    使用python画社交网络图实例代码

    这篇文章主要给大家介绍了关于如何使用python画社交网络图的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用python具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-07-07
  • Python 获取图片GPS等信息锁定图片拍摄地点、拍摄时间(实例代码)

    Python 获取图片GPS等信息锁定图片拍摄地点、拍摄时间(实例代码)

    这篇文章主要介绍了Python 获取图片GPS等信息锁定图片拍摄地点、拍摄时间,先把图片以二进制的格式读取出来,然后通过 exifread 库把里面的 GPS 信息提取出来,再以特定的格式打印出来,本文通过实例代码给大家介绍的非常详细,需要的朋友可以参考下
    2023-07-07
  • python中xlwt模块的具体用法

    python中xlwt模块的具体用法

    本文主要介绍了python中xlwt模块的具体用法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-02-02
  • Python交互环境下打印和输入函数的实例内容

    Python交互环境下打印和输入函数的实例内容

    在本篇文章里小编给大家分享的是关于Python交互环境下打印和输入函数的实例内容,有兴趣的朋友们可以学习下。
    2020-02-02
  • python中zip()函数遍历多个列表方法

    python中zip()函数遍历多个列表方法

    在本篇文章里小编给大家整理的是一篇关于python中zip()函数遍历多个列表方法,对此有兴趣的朋友们可以学习下。
    2021-02-02
  • python 标准差计算的实现(std)

    python 标准差计算的实现(std)

    这篇文章主要介绍了python 标准差计算的实现(std),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-07-07
  • python的id()函数解密过程

    python的id()函数解密过程

    id()函数在使用过程中很频繁,为此本人对此函数深入研究下,晒出代码和大家分享下,希望对你们有所帮助
    2012-12-12

最新评论