如何利用K-Means将文件夹中图像进行分类?

点击上方“小白学视觉”,选择加"星标"或“置顶

重磅干货,第一时间送达

K-Means聚类是最常用的无监督机器学习算法之一。顾名思义,它可用于创建数据集群,从本质上将它们隔离。

现在,我们将做一个简单的示例,将文件夹中的图像进行分离,该文件夹既有猫也有狗的图像。并且将创建两个单独的文件夹(群集),我们将介绍如何自动确定K的最佳值。

猫和狗的图像数据集

首先,我们将从导入所需的库开始。

import numpy as np
import tensorflow as tf
import matplotlib.pyplot as plt
from sklearn.cluster import KMeans
from sklearn.metrics import
  • 15
    点赞
  • 112
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 19
    评论
这是一个比较简单的任务,可以使用PythonOpenCV库和sklearn库来完成。下面是实现的步骤: 1. 导入所需库 ```python import cv2 import os from sklearn.cluster import KMeans ``` 2. 定义函数,用于读取文件夹图像文件并将它们转换为特征向量 ```python def load_images_from_folder(folder): images = [] for filename in os.listdir(folder): img = cv2.imread(os.path.join(folder, filename)) if img is not None: img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB) img = cv2.resize(img, (224, 224)) img = img.flatten() images.append(img) return images ``` 该函数使用OpenCV的imread函数读取图像文件,然后将图像转换为RGB格式并将其大小调整为224x224像素。然后,将图像展平为特征向量,并将所有特征向量存储在一个列表。 3. 定义函数,用于使用K-means聚类算法将特征向量分成指定数量的群组 ```python def kmeans_clustering(features, num_clusters): kmeans = KMeans(n_clusters=num_clusters, random_state=0).fit(features) return kmeans.labels_ ``` 该函数使用sklearn库KMeans类来执行K-means聚类。它接受两个参数:特征向量列表和要创建的群组数量。它返回一个整数列表,其每个元素表示该特征向量属于哪个群组。 4. 定义函数,用于将图像文件按照其所属的群组保存到不同的文件夹 ```python def save_images_by_cluster(folder, labels): num_clusters = len(set(labels)) for i in range(num_clusters): cluster_folder = os.path.join(folder, "cluster_" + str(i)) if not os.path.exists(cluster_folder): os.makedirs(cluster_folder) for filename, label in zip(os.listdir(folder), labels): src_file = os.path.join(folder, filename) dst_folder = os.path.join(folder, "cluster_" + str(label)) dst_file = os.path.join(dst_folder, filename) os.rename(src_file, dst_file) ``` 该函数接受两个参数:包含图像文件的文件夹路径和K-means算法返回的标签列表。它首先创建一个名为“cluster_”+群组编号的文件夹,然后将所有属于该群组的图像文件移动到该文件夹。 5. 将所有函数组合在一起 ```python folder = "path/to/folder" features = load_images_from_folder(folder) labels = kmeans_clustering(features, num_clusters) save_images_by_cluster(folder, labels) ``` 这个代码片段将指定的文件夹的所有图像文件读取为特征向量,然后使用K-means算法将它们分成指定数量的群组。最后,它将图像文件按照它们所属的群组保存到不同的文件夹。 请注意,您需要根据您的实际情况修改代码的一些细节,例如文件夹路径和群组数量。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 19
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小白学视觉

您的赞赏是我们坚持下去的动力~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值