广告
返回顶部
首页 > 资讯 > 后端开发 > Python >OpenCV 图像分割实现Kmean聚类的示例代码
  • 498
分享到

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

2024-04-02 19:04:59 498人浏览 泡泡鱼

Python 官方文档:入门教程 => 点击学习

摘要

目录1 Kmean图像分割2 流程3 实现1 Kmean图像分割 按照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聚类内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: OpenCV 图像分割实现Kmean聚类的示例代码

本文链接: https://www.lsjlt.com/news/144074.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • OpenCV 图像分割实现Kmean聚类的示例代码
    目录1 Kmean图像分割2 流程3 实现1 Kmean图像分割 按照Kmean原理,对图像像素进行聚类。优点:此方法原理简单,效果显著。缺点:实践发现对于前景和背景颜色相近或者颜色...
    99+
    2022-11-13
  • Python K-means实现简单图像聚类的示例代码
    这里直接给出第一个版本的直接实现: import os import numpy as np from sklearn.cluster import KMeans import ...
    99+
    2022-11-12
  • openCV实现图像融合的示例代码
    目录1. 概念2. 流程3 代码1. 概念 图像融合: 两幅图片叠加在一起,形成前景背景的效果。 2. 流程 (1)读入要融合的两幅图片。(2)把两幅图片调整到统一大小,方便下一步叠...
    99+
    2022-11-13
  • Python+OpenCV实现分水岭分割算法的示例代码
    目录前言1.使用分水岭算法进行分割2.Watershed与random walker分割对比前言 分水岭算法是用于分割的经典算法,在提取图像中粘连或重叠的对象时特别有用,例如下图中的...
    99+
    2022-11-11
  • OpenCV实战之图像拼接的示例代码
    目录背景实现步骤一、读取文件二、单应性矩阵计算三、图像拼接总结背景 图像拼接可以应用到手机中的全景拍摄,也就是将多张图片根据关联信息拼成一张图片; 实现步骤 1、读文件并缩放图片大小...
    99+
    2022-11-12
  • C++OpenCV实现像素画的示例代码
    目录准备工作代码实现完整代码最近在学习OpenCV,准备后续更新一波OpenCV相关的内容。代码实现主要是以 C++ 为主, 另外为了辅助学习,还会使用C# 开发一款桌面的软件,用于...
    99+
    2022-11-13
  • OpenCV+Qt实现图像处理操作工具的示例代码
    目录一、目标二、使用Qt界面三、图像处理操作完整代码一、目标 Qt界面实现 雪花屏 高斯模糊 中值滤波 毛玻璃 灰度化 XY方向模糊 双边模糊 腐蚀 [图像处理操作] 要求左边原图,...
    99+
    2022-11-13
    OpenCV Qt图像处理 OpenCV 图像处理 Qt 图像处理
  • golang实现数组分割的示例代码
    需求:给定一个数组和一个正整数,要求把数组分割成多个正整数大小的数组,如果不够分,则最后一个数组分到剩余的所有元素。 示例1: 数组:[1, 2, 3, 4, 5, 6, 7,...
    99+
    2022-11-12
  • OpenCV学习方框滤波实现图像处理代码示例
    目录一、方框滤波二、C++代码三、python代码四、结果展示1、原始图像2、归一化3、不归一化4、平方和求均值一、方框滤波    方框滤波是均值滤波的一种形...
    99+
    2022-11-12
  • python实现黄金分割法的示例代码
    一.问题 使用黄金分割法来计算 二.代码 #黄金分割法python求解PPT上第一个例题 #因为函数要求解最大值而这个方法一般求解最小值所以把函数取负 import numpy as np import m...
    99+
    2022-06-02
    python 黄金分割法
  • Java实现黄金分割法的示例代码
    目录1、概述2、黄金分割法3、修改后的黄金分割算法4、编程实现修改后的黄金分割算法1、概述 黄金分割法是一种区间收缩方法。 所谓区间收缩方法,指的是将含有最优解的区间逐步缩小,直至区...
    99+
    2022-11-13
  • python实现图像识别的示例代码
    一、安装库 首先我们需要安装PIL和pytesseract库。 PIL:(Python Imaging Library)是Python平台上的图像处理标准库,功能非常强大。 pyte...
    99+
    2022-11-11
  • K均值聚类算法的Java版实现代码示例
    1.简介K均值聚类算法是先随机选取K个对象作为初始的聚类中心。然后计算每个对象与各个种子聚类中心之间的距离,把每个对象分配给距离它最近的聚类中心。聚类中心以及分配给它们的对象就代表一个聚类。一旦全部对象都被分配了,每个聚类的聚类中心会根据聚...
    99+
    2023-05-30
    java k均值聚类 算法
  • golang实现数组分割的示例代码怎么写
    这篇文章将为大家详细讲解有关golang实现数组分割的示例代码怎么写,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。需求:给定一个数组和一个正整数,要求把数组分割成多个正整数大小的数组,如果不...
    99+
    2023-06-22
  • C++OpenCV实现灰度图蒙版GrayMask的示例代码
    目录需求说明具体流程功能函数C++测试代码测试效果需求说明 在对图像进行处理时,经常会有这类需求:想对感兴趣区域进行掩膜处理,只操作掩膜内数据,此时需要搭配掩膜绘制功能,并在绘制过程...
    99+
    2022-11-13
  • Python实现图像去雾效果的示例代码
    目录修改部分训练测试数据集下载地址修改部分 我利用该代码进行了去雾任务,并对原始代码进行了增删,去掉了人脸提取并对提取人脸美化的部分,如下图 增改了一些数据处理代码,Create_...
    99+
    2022-11-13
  • MySQL实现字段分割一行转多行的示例代码
    先看一下数据结构,我这里字段比较少,只弄了最重要的部分 根据我们上次学到的LEFT()函数进行分组 SELECT LEFT(provinces,6),CO...
    99+
    2022-11-13
  • Python实现识别图像中人物的示例代码
    目录前言环境部署代码总结前言 接着上一篇:AI识别照片是谁,人脸识别face_recognition开源项目安装使用 根据项目提供的demo代码,调整了一下功能,自己写了一个识别人脸...
    99+
    2022-11-12
  • Python实现Gif图片分解的示例代码
    目录1、模块安装2、模块导入3、分解动图4、批量分解5、生成效果在前面做过一个Gif图片合成的小工具,老朋友应该有所印象。但是,近段时间有人反映合成了的Gif图片该如何进行分解呢? ...
    99+
    2022-11-11
  • K-means聚类算法介绍与利用python实现的代码示例
    聚类 今天说K-means聚类算法,但是必须要先理解聚类和分类的区别,很多业务人员在日常分析时候不是很严谨,混为一谈,其实二者有本质的区别。 分类其实是从特定的数据中挖掘模式,作出判断的过程。比如Gmail...
    99+
    2022-06-04
    示例 算法 代码
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作