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

聚类图像分割

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_maskplt.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.hqwc.cn/news/97308.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

QT listWidget 中实现元素的自由拖拽

QListWIdget中拖拽元素移动 setMovement(QListView::Movement::Free);setDragEnabled(true); setDragDropMode(DragDropMode::DragDrop); setDefaultDropAction(Qt::DropAction::MoveAction);

Flutter小功能实现-咖啡店

1 导航栏实现 效果图: 1.Package google_nav_bar: ^5.0.6 使用文档: google_nav_bar | Flutter Package 2.Code //MyBottomNavBar class MyBottomNavBar extends StatelessWidget {void Function(int)? onTabChange;MyBottomNavBar({super.key, …

2023年高教社杯数学建模思路 - 案例:最短时间生产计划安排

文章目录 0 赛题思路1 模型描述2 实例2.1 问题描述2.2 数学模型2.2.1 模型流程2.2.2 符号约定2.2.3 求解模型 2.3 相关代码2.4 模型求解结果 建模资料 0 赛题思路 (赛题出来以后第一时间在CSDN分享) https://blog.csdn.net/dc_sinor?typeblog 最短时…

任意文件读取和漏洞复现

任意文件读取 1. 概述 一些网站的需求,可能会提供文件查看与下载的功能。如果对用户查看或下载的文件没有限制或者限制绕过,就可以查看或下载任意文件。这些文件可以是漂代码文件,配置文件,敏感文件等等。 任意文件读取会造成&…

transformer源码

1.传统RNN网络 每一层都需要上一层执行完才能执行 1.1 自注意力 在一句话中找到it_指代的是什么,它的上下文语境是什么? self-attetion计算 1.2 multi-header机制 1.3 堆叠多层self-attention,相当于再一次卷积 1.4 位置信息编码 1.5 残…

Spring MVC:域对象共享数据

Spring MVC 前言域对象共享数据使用 ModelAndView 向 request 域对象中共享数据使用 Map 、Model 或 ModelMap 向 request 域对象中共享数据使用 SesionAttributes 注解向 session 域对象中共享数据使用 Servlet API 向 application 域对象中共享数据 附 前言 在上一章中&…

开源django+mysql+vue3前后端分离商城baykeShop使用指南

baykeShop开源商城系统 项目简介 baykeShop(拜客商城系统)是一款全开源Python栈商城系统,管理后台完全前后端分离重写以适配项目,前后端100%开源,后台前端采用开源SCUI开源库对接开发,美观、易用、符合当…

项目介绍:《Online ChatRoom》网页聊天室 — Spring Boot、MyBatis、MySQL和WebSocket的奇妙融合

在当今数字化社会,即时通讯已成为人们生活中不可或缺的一部分。为了满足这一需求,我开发了一个名为"WeTalk"的聊天室项目,该项目基于Spring Boot、MyBatis、MySQL和WebSocket技术,为用户提供了一个实时交流的平台。在本…

jmeter单接口和多接口测试

最近接触到了多接口串联,接口串联的技术会在其他帖子有说明,其核心技术点就是通过正则表达式和变量来实现接口的关联。目前为止呢笔者用到的地方还只有一个,就是关于session保持的时候。但是看到很多资料都说测试过程中经常遇到b接口需要用a接…

Nginx安装与部署

文章目录 一,说明二,下载三,Windows下安装1,安装2,启动3,验证 四,Linux下安装1,安装2,启动3,验证 五,Nginx配置 一,说明 Nginx是一款高性能Web和反向代理服务器,提供内存少,高并发,负载均衡和反向代理服务,支持windos和linux系统 二,下载 打开浏览器,输入地址: https://ngin…

机器学习基础17-基于波士顿房价(Boston House Price)数据集训练模型的整个过程讲解

机器学习是一项经验技能,实践是掌握机器学习、提高利用机器学习 解决问题的能力的有效方法之一。那么如何通过机器学习来解决问题呢? 本节将通过一个实例来一步一步地介绍一个回归问题。 本章主要介绍以下内容: 如何端到端地完成一个回归问题…

linux免密登录最简单--图文详解

最简单的免密登录 1.A电脑生成秘钥 ssh-keygen -t rsa 2.A电脑将秘钥传给B电脑 ssh-copy-id root192.168.1.129 #将秘钥直接传给B电脑 需要输入B电脑的密码,可以看到成功。 3.测试 同理:如果B->A也需要免密登录,统一的操作。 大功告…