Python提取PNG图片像素值并统计指定像素数量
这段代码使用Python提取PNG图片的像素值,并将每个像素值保存到输出文件夹中的文本文件中。同时,它还统计了每个像素值在所有图片中的数量,并将统计结果保存到输出文件夹中的统计文件中。
具体步骤如下:
-
引入所需的库:PIL中的Image模块用于处理图像,os模块用于操作文件和文件夹,collections模块中的defaultdict用于统计像素值的数量。
-
定义输入文件夹和输出文件夹的路径。
-
确保输出文件夹存在,如果不存在则创建。
-
定义要提取的像素值,这里给出了四种颜色值,分别代表严重拥堵、拥挤、缓行和畅通。
-
创建一个defaultdict对象pixel_counts,用于统计每个像素值的个数。
-
使用os.listdir()函数遍历输入文件夹中的所有文件。
-
判断文件是否为PNG格式,如果是则执行以下操作:
a. 构建输入文件的完整路径。
b. 使用Image模块打开PNG图片,并将其转换为RGB模式。
c. 使用getdata()函数获取图片的像素值。
d. 构建输出文件的完整路径,并将文件扩展名从'.png'替换为'.txt'。
e. 打开输出文件,并遍历每个像素值,将其写入文件中。
f. 同时,将当前像素值的计数加1。
-
构建统计文件的完整路径。
-
打开统计文件,并遍历每个像素值及其对应的计数,将它们写入文件中。
-
打印'转换完成'提示信息。
这段代码将提取每个PNG图片的像素值,并将其保存到文本文件中。同时,它还统计了每个像素值在所有图片中的数量,并将统计结果保存到统计文件中。
from PIL import Image
import os
from collections import defaultdict
# 输入文件夹和输出文件夹的路径
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 = defaultdict(int)
# 循环遍历输入文件夹中的所有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())
# 将所有像素值保存到输出文件夹中的文本文件中
output_path = os.path.join(output_folder, filename.replace('.png', '.txt'))
with open(output_path, 'w') as file:
for pixel in pixels:
file.write(f'{pixel[0]}, {pixel[1]}, {pixel[2]}
')
pixel_counts[pixel] += 1
# 将每种像素值的个数保存到输出文件夹中的统计文件中
statistic_path = os.path.join(output_folder, 'pixel_counts.txt')
with open(statistic_path, 'w') as file:
for pixel, count in pixel_counts.items():
file.write(f'{pixel[0]}, {pixel[1]}, {pixel[2]}: {count}
')
print('转换完成')
原文地址: https://www.cveoy.top/t/topic/b1TM 著作权归作者所有。请勿转载和采集!