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颜色空间中,颜色信息被分成三个成分:
H(色相):表示颜色的类型或种类。它以角度度量颜色的类型,从0°到360°,对应于不同的颜色,如红色、绿色、蓝色等。例如,0°是红色,120°是绿色,240°是蓝色。
S(饱和度):表示颜色的鲜艳程度或纯度。S值为0表示灰阶色,而S值为1表示完全饱和的颜色。饱和度值介于0和1之间。
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()
