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


    聚类图像分割

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

    1. import numpy as np
    2. import matplotlib.pyplot as plt
    3. from sklearn.cluster import KMeans
    4. import cv2
    5. # 读取图像
    6. image = cv2.imread('1.png')
    7. # 将图像像素转换为特征向量
    8. rows, cols, channels = image.shape
    9. features = image.reshape(rows * cols, channels)
    10. # 使用K均值聚类
    11. num_clusters = 2
    12. kmeans = KMeans(n_clusters=num_clusters)
    13. kmeans.fit(features)
    14. # 获取聚类中心和标签
    15. centroids = kmeans.cluster_centers_
    16. labels = kmeans.labels_
    17. # 重构图像
    18. reconstructed_image = centroids[labels].reshape(rows, cols, channels)
    19. # 显示结果
    20. plt.figure(figsize=(12, 6))
    21. plt.subplot(121)
    22. plt.title('Original Image')
    23. plt.imshow(image)
    24. plt.axis('off')
    25. plt.subplot(122)
    26. plt.title('Clustered Image')
    27. plt.imshow(reconstructed_image.astype(np.uint8))
    28. plt.axis('off')
    29. 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)来选择感兴趣的颜色范围,并将其分割出来。

    1. import cv2
    2. import numpy as np
    3. import matplotlib.pyplot as plt
    4. # 读取彩色图像
    5. image = cv2.imread('1.png')
    6. # 将图像转换到HSV颜色空间
    7. hsv_image = cv2.cvtColor(image, cv2.COLOR_BGR2HSV)
    8. # 定义亮绿色和浅绿色的HSV范围
    9. bright_green_lower = np.array([38, 120, 100])
    10. bright_green_upper = np.array([80, 255, 255])
    11. pale_green_lower = np.array([35, 100, 100])
    12. pale_green_upper = np.array([40, 255, 255])
    13. # 创建颜色掩膜
    14. bright_green_mask = cv2.inRange(hsv_image, bright_green_lower, bright_green_upper)
    15. pale_green_mask = cv2.inRange(hsv_image, pale_green_lower, pale_green_upper)
    16. # 合并掩膜,得到亮绿色和浅绿色区域
    17. green_regions = cv2.bitwise_or(bright_green_mask, pale_green_mask)
    18. # 提取绿色区域
    19. green_image = cv2.bitwise_and(image, image, mask=green_regions)
    20. # 显示结果
    21. plt.figure(figsize=(12, 6))
    22. plt.subplot(231)
    23. plt.imshow(cv2.cvtColor(image, cv2.COLOR_BGR2RGB))
    24. plt.title('Original Image')
    25. plt.axis('off')
    26. plt.subplot(232)
    27. plt.imshow(pale_green_mask, cmap='gray')
    28. plt.title('pale Green Mask')
    29. plt.axis('off')
    30. plt.subplot(233)
    31. plt.imshow(cv2.cvtColor(green_image, cv2.COLOR_BGR2RGB))
    32. plt.title('Green Regions')
    33. plt.axis('off')
    34. plt.subplot(234)
    35. plt.imshow(cv2.cvtColor(bright_green_mask, cv2.COLOR_BGR2RGB))
    36. plt.title('Bright Green Mask')
    37. plt.axis('off')
    38. plt.show()

    1. for i in range(height):
    2. for j in range(150):
    3. if(pale_green_mask[i][j]==255):
    4. pale_green_mask[i][j]=0
    5. pale_green_mask
    6. plt.figure(figsize=(12, 6))
    7. plt.subplot(234)
    8. plt.imshow(cv2.cvtColor(pale_green_mask, cv2.COLOR_BGR2RGB))
    9. plt.title('Bright Green Mask')
    10. plt.axis('off')
    11. plt.show()

    1. #膨胀
    2. pale_green_mask2=pale_green_mask
    3. kernel_size = 2
    4. kernel = np.ones((kernel_size, kernel_size), np.uint8)
    5. # 执行膨胀
    6. pale_green_mask2 = cv2.dilate(pale_green_mask2, kernel, iterations=2)
    7. plt.figure(figsize=(12, 6))
    8. plt.subplot(234)
    9. plt.imshow(cv2.cvtColor(pale_green_mask2, cv2.COLOR_BGR2RGB))
    10. plt.title('Bright Green Mask')
    11. plt.axis('off')
    12. plt.show()

  • 相关阅读:
    C++中new[…]和动态数组
    Scala技术与架构-1
    【深度学习 AIGC】stablediffusion-infinity 在无界限画布中输出绘画 Outpainting
    工业机器人发展趋势
    在基于ABP框架的前端项目Vue&Element项目中采用电子签名的处理
    arm push/pop/b/bl汇编指令
    世界杯海信再出圈,三星:“谈不上愉悦”
    防抖跟节流
    分类预测 | MATLAB实现POA-CNN鹈鹕算法优化卷积神经网络多特征分类预测
    JS逆向爬虫---请求参数加密③【比特币交易爬虫】
  • 原文地址:https://blog.csdn.net/qq_46644680/article/details/132642867