【图像分割】实战篇(1)传统图像分割

news2025/7/12 16:25:04

聚类图像分割

K均值聚类是一种常用的聚类算法,它将图像像素分为K个不同的群集,以使每个群集内的像素具有相似的颜色或强度。这可以用于分割具有不同颜色或亮度的对象。

import numpy as np
import matplotlib.pyplot as plt
from sklearn.cluster import KMeans
import cv2

# 读取图像
image = cv2.imread('1.png')

# 将图像像素转换为特征向量
rows, cols, channels = image.shape
features = image.reshape(rows * cols, channels)

# 使用K均值聚类
num_clusters = 2
kmeans = KMeans(n_clusters=num_clusters)
kmeans.fit(features)

# 获取聚类中心和标签
centroids = kmeans.cluster_centers_
labels = kmeans.labels_

# 重构图像
reconstructed_image = centroids[labels].reshape(rows, cols, channels)





# 显示结果
plt.figure(figsize=(12, 6))
plt.subplot(121)
plt.title('Original Image')
plt.imshow(image)
plt.axis('off')

plt.subplot(122)
plt.title('Clustered Image')
plt.imshow(reconstructed_image.astype(np.uint8))
plt.axis('off')

plt.show()

HSV空间颜色分割

HSV(色相、饱和度、明度)颜色空间是一种常用于图像处理和计算机视觉中的颜色表示方法。在HSV颜色空间中,颜色信息被分成三个成分:

  1. H(色相):表示颜色的类型或种类。它以角度度量颜色的类型,从0°到360°,对应于不同的颜色,如红色、绿色、蓝色等。例如,0°是红色,120°是绿色,240°是蓝色。

  2. S(饱和度):表示颜色的鲜艳程度或纯度。S值为0表示灰阶色,而S值为1表示完全饱和的颜色。饱和度值介于0和1之间。

  3. V(明度):表示颜色的亮度。V值为0表示黑色,V值为1表示最大亮度的颜色。明度值介于0和1之间。

HSV颜色空间非常适合进行颜色分割,因为它将颜色信息与亮度信息分开,使得颜色分割更容易。在进行HSV颜色分割时,通常可以根据色相(H)和饱和度(S)来选择感兴趣的颜色范围,并将其分割出来。

import cv2
import numpy as np
import matplotlib.pyplot as plt

# 读取彩色图像
image = cv2.imread('1.png')

# 将图像转换到HSV颜色空间
hsv_image = cv2.cvtColor(image, cv2.COLOR_BGR2HSV)

# 定义亮绿色和浅绿色的HSV范围
bright_green_lower = np.array([38, 120, 100])
bright_green_upper = np.array([80, 255, 255])

pale_green_lower = np.array([35, 100, 100])
pale_green_upper = np.array([40, 255, 255])

# 创建颜色掩膜
bright_green_mask = cv2.inRange(hsv_image, bright_green_lower, bright_green_upper)
pale_green_mask = cv2.inRange(hsv_image, pale_green_lower, pale_green_upper)

# 合并掩膜,得到亮绿色和浅绿色区域
green_regions = cv2.bitwise_or(bright_green_mask, pale_green_mask)

# 提取绿色区域
green_image = cv2.bitwise_and(image, image, mask=green_regions)

# 显示结果
plt.figure(figsize=(12, 6))
plt.subplot(231)
plt.imshow(cv2.cvtColor(image, cv2.COLOR_BGR2RGB))
plt.title('Original Image')
plt.axis('off')

plt.subplot(232)
plt.imshow(pale_green_mask, cmap='gray')
plt.title('pale Green Mask')
plt.axis('off')

plt.subplot(233)
plt.imshow(cv2.cvtColor(green_image, cv2.COLOR_BGR2RGB))
plt.title('Green Regions')
plt.axis('off')

plt.subplot(234)
plt.imshow(cv2.cvtColor(bright_green_mask, cv2.COLOR_BGR2RGB))
plt.title('Bright Green Mask')
plt.axis('off')

plt.show()

for i in range(height):
    for j in range(150):
        if(pale_green_mask[i][j]==255):
            pale_green_mask[i][j]=0
pale_green_mask

plt.figure(figsize=(12, 6))
plt.subplot(234)
plt.imshow(cv2.cvtColor(pale_green_mask, cv2.COLOR_BGR2RGB))
plt.title('Bright Green Mask')
plt.axis('off')

plt.show()

#膨胀
pale_green_mask2=pale_green_mask
kernel_size = 2
kernel = np.ones((kernel_size, kernel_size), np.uint8)

# 执行膨胀
pale_green_mask2 = cv2.dilate(pale_green_mask2, kernel, iterations=2)

plt.figure(figsize=(12, 6))
plt.subplot(234)
plt.imshow(cv2.cvtColor(pale_green_mask2, cv2.COLOR_BGR2RGB))
plt.title('Bright Green Mask')
plt.axis('off')

plt.show()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/964870.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

单片机-控制按键点亮LED灯

1、按键电路图 定义四个按键引脚 1、按键按下 为 输入为低电平 2、按键不按下 IO有上拉电阻,为高电平 // 定义 按键的 管教 sbit KEY1 P3^1; sbit KEY2 P3^0; sbit KEY3 P3^2; sbit KEY4 P3^3; 2、LED灯电路图 LED 输出高电平为亮 // 定义LED灯 管教 sbit LED1…

基于SpringBoot2的后台业务管理系统

概述 SpringBoot-Plus 是一个适合大系统拆分成小系统的架构,java快速开发平台,或者是一个微服务系统。其中加入了Thymeleaf数据模板语言代替了之前的JSP页面方式。页面展示采用Layui前端框架,包含了用户管理,角色管理&#xff0c…

获取Linux内核源码

在嵌入式平台上做Linux开发的时候,我们用的kernel都是芯片厂家移植到自家平台上的,但是最初的原生Linux内核的源码是从哪里来的呢?下面我们介绍一下怎么获取原生的Linux源码。 从Linux社区获取内核kernel源码 Linux社区的官方网站是 https:…

【Day-26慢就是快】代码随想录-二叉树-对阵二叉树

给定一个二叉树,检查它是否是镜像对称的。 —————————————————————————————————————————— 分析: 需要比较的是根节点的左右子树,且是两个子树的里侧和外侧的元素是否相等。 根据后序遍历算法&…

Modbus通信协议

Modbus通信协议 一、概述 Modbus通信协议是一种工业现场总线协议标准,常用的Modbus协议有以下三种类型:Modbus TCP、Modbus RTU、Modbus ASCll。 Modbus通信协议解决了通过串行线路在电子设备之间发送信息的问题。该协议在遵循该协议的体系结构中实现主…

网络分层的真实含义

复杂的程序都要分层,这是程序设计的要求。比如,复杂的电商还会分数据库层、缓存层、Compose 层、Controller 层和接入层,每一层专注做本层的事情。 当一个网络包从一个网口经过的时候,你看到了,首先先看看要不要请进来…

如何进行微服务测试?一文4个知识点带入门微服务测试!

关注留言点赞,带你了解最流行的软件开发知识与最新科技行业趋势。 本文将讨论微服务测试的重要性、挑战和最佳实践。 微服务架构是一种越来越流行的构建复杂分布式系统的方法。在此体系结构中,大型应用程序被分成较小的、独立的服务,这些服务…

uniapp 实现滑动元素删除效果

官网地址:uni-app官网 (dcloud.net.cn) 最终效果如下图: 滑动删除需要用到 uni-ui 的 uni-swipe-action 组件和 uni-swipe-action-item 属性名类型可选值默认值是否必填说明left-optionsArray/Object--否左侧选项内容及样式right-optionsArray/Object--…

算法通关村第10关【黄金】| 归并排序

归并排序(Merge Sort)是一种常见的基于比较的排序算法,它的主要思想是分而治之(Divide and Conquer)。它的核心思想是将一个大的问题分解为小的子问题,解决子问题,然后将它们合并(me…

【论文阅读】Pay Attention to MLPs

作者:Google Research, Brain Team 泛读:只关注其中cv的论述 提出了一个简单的网络架构,gMLP,基于门控的MLPs,并表明它可以像Transformers一样在关键语言和视觉应用中发挥作用 提出了一个基于MLP的没有self-attentio…

一篇文章搞定《实战中的设计模式之Android版》

一篇文章搞定《实战中的设计模式之Android版》 前言单例设计模式模式选用说明场景复现: 构建者设计模式模式选用说明场景复现 工厂设计模式模式选用说明场景复现 策略设计模式模式选用说明场景复现 装饰者设计模式模式选用说明场景复现 适配器设计模式模式选用说明场…

C++--动态规划其他问题

1.一和零 力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台 给你一个二进制字符串数组 strs 和两个整数 m 和 n 。 请你找出并返回 strs 的最大子集的长度,该子集中 最多 有 m 个 0 和 n 个 1 。 如果 x 的所有元素也是 y 的元素&#xff0…

如何使用Cygwin编译最新版的Redis源码,生成适用于Windows的Redis

文章目录 一、准备Cygwin环境二、下载Redis源码三、编译redis-7.2.01. 执行make命令2. 重新执行make命令3. 再次执行make命令4. 将编译后的可执行文件及依赖放到同一个文件夹5. 测试编译生成的可执行程序 四、换其他redis版本重新编译1. 编译redis-7.0.122. 编译redis-6.2.133.…

算法:分治思想处理归并递归问题

文章目录 算法原理实现思路典型例题排序数组数组中的逆序对计算右侧小于当前元素的个数 总结 算法原理 利用归并思想进行分治也是很重要的一种思路,在解决逆序对的问题上有很大的需求空间 于是首先归并排序是首先的,归并排序要能写出来: c…

还在苦恼如何开发一个Chrome插件吗?十分钟带你实现一个实用小插件

你是否曾考虑过创建自己的 Chrome 插件,但又挠头毫无思路?那么在接下来的几分钟里,我不仅会介绍 Chrome 浏览器扩展的基本知识,还会指导你通过五个简单的步骤来制作自己的扩展。 知道怎么做吗?让我们一探究竟&#xff…

探索在云原生环境中构建的大数据驱动的智能应用程序的成功案例,并分析它们的关键要素。

文章目录 1. Netflix - 个性化推荐引擎2. Uber - 实时数据分析和决策支持3. Airbnb - 价格预测和优化5. Google - 自然语言处理和搜索优化 🎈个人主页:程序员 小侯 🎐CSDN新晋作者 🎉欢迎 👍点赞✍评论⭐收藏 ✨收录专…

EG1164大功率同步整流升压模块开源,最高效率97%

EG1164大功率同步整流Boost升压电源模块,最高效率97%,输入电压8~50V,输出电压8~60V可调,最大功率300瓦以上,开关频率219kHz。 白嫖了张嘉立创的彩色丝印券就随便画了个板试试,第一次打彩色丝印。 因为我测…

word导出为HTML格式教程,同时也导出图片

在写文档教程时,有时需要借鉴人家的专业文档内容,一般都是word格式文档。word直接复制里面的内容,帐帖到网站编辑器会有很多问题,需要二次清楚下格式才行,而且图片是没办法直接复制到编辑器内的。所以最方便的办法是将…

ARM编程模型-指令流水线

流水线技术通过多个功能部件并行工作来缩短程序执行时间,提高处理器核的效率和吞吐率,从而成为微处理器设计中最为重要的技术之一。 1. 3级流水线 到ARM7为止的ARM处理器使用简单的3级流水线,它包括下列流水线级。 (1&#xff0…

如何中mac上安装多版本python并配置PATH

摘要 mac 默认安装的python是 python3,但是如果我们需要其他python版本时,该怎么办呢? 例如:需要python2 版本,如果使用homebrew安装会提示没有python2。同时使用python --version 会发现commond not found。 所以本…