图片分割实验

来自CloudWiki
跳转至: 导航搜索

应用:网站分类

图像分割即将图像分成具有各自特性的同质区域并提取出感兴趣目标物体的技术和过程,它是图像处理到图像分析的关键步骤,是图像处理和机器人视觉领域的基本问题之一,近年来已成为社会研究的热点,被越来越广泛地应用于各种领域,如遥感气象服务,医学影像分析,军事研究领域、交通图像分析、图像 压缩、图像检索等。

import PIL.Image as image
import numpy as np
from sklearn.cluster import KMeans


def loadImg(filePath):
    # f = open(filePath, 'rb')  # 以二进制读取文件
    data = []
    img = image.open(filePath)  # 调用PIL库的open方法将图片打开为mxnx3的矩阵
    m, n = img.size  # 获取图片的尺寸大小
    for i in range(m):
        for j in range(n):
            x, y, z = img.getpixel((i, j))
            data.append([x / 256.0, y / 256.0, z / 256.0])  # 将每个像素点的RGB值转化到0-1
    # f.close()
    return np.mat(data), m, n  # 使用mat方法转化为矩阵


def ImgSeg():
    imgData, row, col = loadImg('img.jpg')
    print(imgData.shape, row, col)
    label = KMeans(n_clusters=4).fit_predict(imgData)  # 将图片聚类为4类,值分别为0,1,2,3
    label = label.reshape([row, col])
    img_res = image.new("L", (row, col))  # L表示创建一张灰度图
    for i in range(row):
        for j in range(col):
            img_res.putpixel((i, j), int(256 / (label[i][j] + 1)))  # 不同聚类对应不同灰度颜色
    img_res.save("result.jpg", "JPEG")


if __name__ == "__main__":
    ImgSeg()