python--利用LAB信息对彩色图像进行聚类(cv2图像rgb顺序、python列表list转数组array)

python–利用LAB信息对彩色图像进行聚类(cv2图像rgb顺序、python列表list转数组array)

输入:多张舌像,一次输入一张舌像
目的:对输入的一张舌像利用LAB信息,将像素聚类,这里聚类为4类
输出:聚类中心(每一个中心用lab值表示)

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

# 目的:读取图片,利用【l* a* b*】进行聚类,将聚类中心保存到npy文件,在画出的色度图上画出这些聚类中心


# 读取指定文件夹下所有文件的名字
def readname(filepath):
    name = os.listdir(filepath)
    return name


# 利用[l* a* b*]实现聚类
def seg_kmeans_color(img):
    #img = cv2.imread('D:\\MATLABfile\\2020-9-24\\resize.png', cv2.IMREAD_COLOR) # cv2读入三通道图像的顺序是BGR
    img = cv2.cvtColor(img, cv2.COLOR_BGR2LAB) # BGR转到LAB空间
    # 变换图像通道bgr->rgb
    # b, g, r = cv2.split(img)
    # img = cv2.merge([r, g, b])
    # 3个通道展平 二维矩阵展成一维向量
    img_flat = img.reshape((img.shape[0] * img.shape[1], 3))
    img_flat = np.float32(img_flat)
    # 迭代参数
    criteria = (cv2.TERM_CRITERIA_EPS + cv2.TermCriteria_MAX_ITER, 20, 0.5)
    flags = cv2.KMEANS_RANDOM_CENTERS
    # 聚类,这里k=4 :背景、舌质、舌苔、异常区域
    compactness, labels, centers = cv2.kmeans(img_flat, 4, None, criteria, 10, flags)
    # 显示结果
    # img_output = labels.reshape((img.shape[0], img.shape[1]))
    # plt.subplot(121), plt.imshow(img), plt.title('input')
    # plt.subplot(122), plt.imshow(img_output), plt.title('kmeans')
    # plt.show()
    # print(centers)
    return centers

#
# cv2.cvtColor(img, cv2.COLOR_LAB2RGB)


if __name__ == '__main__':
    FilePath = 'F:/舌色/05-class/淡白'
    name = readname(FilePath)
    for i in range(len(name)):
        img_name = FilePath + '/' + name[i]
        img = cv2.imread(img_name)  # cv2读入顺序是bgr
        b, g, r = cv2.split(img)
        img = cv2.merge([r, g, b])
        img_lab = cv2.cvtColor(img, cv2.COLOR_RGB2LAB)  
        # RGB颜色空间转换到LAB颜色空间
        centers = seg_kmeans_color(img_lab)
---------------------------------------------------

注意点:cv2.imread(path) # 读入三通道图的顺序是bgr
          
        from PIL import Image
        Image.open(path) # 读入三通道图像的顺序是rgb

        a = []; # 建立空列表
        np.array(a); # 列表转换为数组,注意空列表无法这样转换为数组
        a.tolist(); # 转换为list


©️2020 CSDN 皮肤主题: 数字20 设计师:CSDN官方博客 返回首页