以下 Python 代码使用 PIL 库来实现统计每张图片不同类像素值的数量。

from PIL import Image
import os

# 输入文件夹和输出文件夹的路径
input_folder = r'C:\Users\jh\Desktop\data\images_block'
output_folder = r'C:\Users\jh\Desktop\data\images_flatten'

# 确保输出文件夹存在
if not os.path.exists(output_folder):
    os.makedirs(output_folder)

# 定义要提取的像素值
pixels_to_extract = [(180, 0, 0), (232, 14, 14), (255, 208, 69), (79, 210, 125)]
pixel_counts = {pixel: 0 for pixel in pixels_to_extract}

# 初始化像素值计数器

# 循环遍历输入文件夹中的所有PNG图片
for filename in os.listdir(input_folder):
    if filename.endswith('.png'):
        input_path = os.path.join(input_folder, filename)

        # 打开PNG图片并将其转换为RGB模式
        image = Image.open(input_path).convert('RGB')

        # 获取图片的像素值
        pixels = list(image.getdata())

        # 提取指定的像素值
        extracted_pixels = [pixel for pixel in pixels if pixel in pixels_to_extract]

        # 统计每张图片不同像素值的数量
        for pixel in extracted_pixels:
            pixel_counts[pixel] += 1

        # 将像素值保存到输出文件夹中的文本文件中
        output_path = os.path.join(output_folder, filename.replace('.png', '.txt'))
        with open(output_path, 'w') as file:
            for pixel in extracted_pixels:
                file.write(f'{pixel[0]}, {pixel[1]}, {pixel[2]}
')

print('转换完成')
print('每张图片不同像素值的数量:')
for pixel, count in pixel_counts.items():
    print(f'{pixel}: {count}')

代码的核心逻辑是:

  1. 定义要提取的像素值列表 pixels_to_extract,并使用字典 pixel_counts 初始化像素值计数器。

  2. 循环遍历输入文件夹中的所有PNG图片,打开每张图片并将其转换为RGB模式。

  3. 获取图片的像素值列表 pixels,并使用列表推导式提取指定的像素值,将其保存在列表 extracted_pixels 中。

  4. 统计每张图片不同像素值的数量,遍历提取的像素值列表 extracted_pixels,并在 pixel_counts 字典中相应的像素值计数器上加一。

  5. 将像素值保存到输出文件夹中的文本文件中,将提取的像素值列表 extracted_pixels 写入到以图片文件命名的文本文件中。

如果想要挨个统计每张图片的不同类像素值的数量,可以在循环遍历每张图片的位置加入额外的代码来实现。以下是一个示例:

for filename in os.listdir(input_folder):
    if filename.endswith('.png'):
        # 之前的代码...
        
        print(f'{filename}的不同类像素值数量:')
        for pixel, count in pixel_counts.items():
            print(f'{pixel}: {count}')

这样,每处理完一张图片就会打印其不同类像素值的数量。

Python 图片像素统计:提取指定颜色并计数

原文地址: https://www.cveoy.top/t/topic/b1jt 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录