使用K-means算法批量处理图像文件并保存结果
时间: 2024-04-24 15:05:00 浏览: 12
K-means算法是一种聚类算法,可以用于将图像像素点聚类成不同的组。以下是使用Python和OpenCV库实现批量处理图像文件的示例代码:
```python
import cv2
import numpy as np
import os
def kmeans_image(image_path, k=2):
# 读取图像
image = cv2.imread(image_path)
# 将图像像素点转换为一维数组
pixels = image.reshape((-1, 3))
# 使用K-means算法对像素点进行聚类
criteria = (cv2.TERM_CRITERIA_EPS + cv2.TERM_CRITERIA_MAX_ITER, 10, 1.0)
ret, labels, centers = cv2.kmeans(pixels, k, None, criteria, 10, cv2.KMEANS_RANDOM_CENTERS)
# 将聚类结果转换为图像
centers = np.uint8(centers)
result = centers[labels.flatten()]
result = result.reshape((image.shape))
# 返回聚类结果
return result
def batch_kmeans_images(input_dir, output_dir, k=2):
# 遍历输入目录下的所有图像文件
for filename in os.listdir(input_dir):
if filename.endswith(".jpg") or filename.endswith(".png"):
# 对每个图像文件进行聚类
image_path = os.path.join(input_dir, filename)
result = kmeans_image(image_path, k)
# 将聚类结果保存到输出目录下的同名文件
output_path = os.path.join(output_dir, filename)
cv2.imwrite(output_path, result)
# 示例用法
input_dir = "/path/to/input/dir"
output_dir = "/path/to/output/dir"
batch_kmeans_images(input_dir, output_dir, k=2)
```
在上述代码中,`kmeans_image`函数接收一个图像文件路径和聚类数k作为输入,返回聚类结果。`batch_kmeans_images`函数接收一个输入目录、一个输出目录和聚类数k作为输入,遍历输入目录下的所有图像文件,对每个图像文件进行聚类并将聚类结果保存到输出目录下的同名文件。
注意,上述代码仅演示了如何使用K-means算法对图像进行聚类,并没有考虑对图像质量的影响。在实际应用中,可能需要对图像进行预处理或调整算法参数以获得更好的聚类效果。