本文目录导读:

使用 Python + Pillow (PIL)
import os
from PIL import Image
import glob
def batch_convert_images(input_dir, output_dir, target_mode='RGB'):
"""
批量转换图片色彩空间
:param input_dir: 输入目录
:param output_dir: 输出目录
:param target_mode: 目标色彩模式 (RGB, CMYK, LAB, HSV, Grayscale 等)
"""
# 创建输出目录
os.makedirs(output_dir, exist_ok=True)
# 支持的图片格式
image_extensions = ['*.jpg', '*.jpeg', '*.png', '*.bmp', '*.tiff']
for ext in image_extensions:
for img_path in glob.glob(os.path.join(input_dir, ext)):
try:
# 打开图片
img = Image.open(img_path)
# 转换色彩空间
if target_mode == 'CMYK':
converted_img = img.convert('CMYK')
elif target_mode == 'Lab':
converted_img = img.convert('LAB')
elif target_mode == 'HSV':
converted_img = img.convert('HSV')
elif target_mode == 'Grayscale':
converted_img = img.convert('L') # L 表示灰度
else: # 默认 RGB
converted_img = img.convert('RGB')
# 保存图片
filename = os.path.basename(img_path)
output_path = os.path.join(output_dir, filename)
converted_img.save(output_path)
print(f"转换完成: {filename} -> {target_mode}")
except Exception as e:
print(f"转换失败 {img_path}: {str(e)}")
# 使用示例
if __name__ == "__main__":
# 批量转换图片为 CMYK
batch_convert_images(
input_dir="./input_images",
output_dir="./output_cmyk",
target_mode='CMYK'
)
使用 ImageMagick (命令行)
#!/bin/bash
# 批量转换所有 JPG 图片为 CMYK
for file in ./input/*.{jpg,jpeg,png}; do
if [ -f "$file" ]; then
filename=$(basename "$file")
convert "$file" -colorspace CMYK "./output/cmyk_${filename%.*}.jpg"
echo "转换完成: $filename"
fi
done
Python + OpenCV
import cv2
import os
import glob
import numpy as np
def batch_color_space_conversion(input_dir, output_dir, conversion_type='RGB_TO_HSV'):
"""
使用 OpenCV 批量转换色彩空间
:param conversion_type: 'RGB_TO_HSV', 'RGB_TO_LAB', 'RGB_TO_YCrCb' 等
"""
os.makedirs(output_dir, exist_ok=True)
# 转换类型映射
conversions = {
'RGB_TO_HSV': cv2.COLOR_RGB2HSV,
'RGB_TO_LAB': cv2.COLOR_RGB2LAB,
'RGB_TO_YCrCb': cv2.COLOR_RGB2YCrCb,
'RGB_TO_HLS': cv2.COLOR_RGB2HLS,
'BGR_TO_RGB': cv2.COLOR_BGR2RGB,
'BGR_TO_GRAY': cv2.COLOR_BGR2GRAY
}
conversion_code = conversions.get(conversion_type, cv2.COLOR_RGB2HSV)
for img_path in glob.glob(os.path.join(input_dir, "*.*")):
try:
# 读取图片 (OpenCV 默认 BGR)
img = cv2.imread(img_path)
if img is None:
continue
# 转换色彩空间
converted = cv2.cvtColor(img, conversion_code)
# 保存图片
filename = os.path.basename(img_path)
output_path = os.path.join(output_dir, f"converted_{filename}")
cv2.imwrite(output_path, converted)
print(f"转换完成: {filename}")
except Exception as e:
print(f"转换失败 {img_path}: {str(e)}")
# 使用示例
batch_color_space_conversion(
input_dir="./input",
output_dir="./output",
conversion_type='RGB_TO_HSV'
)
批量转换脚本 (通用版)
#!/usr/bin/env python3
"""
通用色彩空间批量转换工具
"""
import argparse
import os
from PIL import Image
import glob
from concurrent.futures import ThreadPoolExecutor
import tqdm
def convert_single_image(args):
"""单个图片转换函数"""
img_path, output_dir, target_mode = args
try:
img = Image.open(img_path)
filename = os.path.basename(img_path)
# 转换色彩空间
converted_img = convert_color_mode(img, target_mode)
# 保存
output_path = os.path.join(output_dir, f"converted_{filename}")
converted_img.save(output_path)
return (filename, True, None)
except Exception as e:
return (img_path, False, str(e))
def convert_color_mode(img, mode):
"""转换色彩模式"""
modes = {
'RGB': 'RGB',
'RGBA': 'RGBA',
'CMYK': 'CMYK',
'GRAY': 'L', # 灰度
'HSV': 'HSV',
'LAB': 'LAB'
}
target_mode = modes.get(mode.upper(), 'RGB')
return img.convert(target_mode)
def main():
parser = argparse.ArgumentParser(description='批量图片色彩空间转换工具')
parser.add_argument('input_dir', help='输入目录')
parser.add_argument('output_dir', help='输出目录')
parser.add_argument('--mode', default='RGB',
choices=['RGB', 'CMYK', 'GRAY', 'HSV', 'LAB'],
help='目标色彩模式')
parser.add_argument('--threads', type=int, default=4, help='线程数')
parser.add_argument('--extensions', nargs='+', default=['*.jpg', '*.png'],
help='文件扩展名')
args = parser.parse_args()
# 创建输出目录
os.makedirs(args.output_dir, exist_ok=True)
# 收集所有图片路径
image_paths = []
for ext in args.extensions:
image_paths.extend(glob.glob(os.path.join(args.input_dir, ext)))
print(f"找到 {len(image_paths)} 个图片文件")
# 准备参数
convert_args = [(path, args.output_dir, args.mode) for path in image_paths]
# 多线程转换
with ThreadPoolExecutor(max_workers=args.threads) as executor:
results = list(tqdm.tqdm(
executor.map(convert_single_image, convert_args),
total=len(convert_args),
desc="转换进度"
))
# 统计结果
success = [r for r in results if r[1]]
failed = [r for r in results if not r[1]]
print(f"\n转换完成:")
print(f"成功: {len(success)} 个")
print(f"失败: {len(failed)} 个")
if failed:
print("\n失败的图片:")
for f in failed:
print(f" - {f[0]}: {f[2]}")
if __name__ == "__main__":
main()
使用方法
安装依赖:
pip install Pillow opencv-python tqdm
命令行使用:
# 基本用法 python batch_convert.py ./input ./output --mode CMYK # 指定文件类型 python batch_convert.py ./input ./output --mode GRAY --extensions *.jpg *.png # 多线程处理 python batch_convert.py ./input ./output --mode HSV --threads 8
常见色彩模式说明
- RGB: 红绿蓝(屏幕显示)
- CMYK: 青品黄黑(打印输出)
- GRAY: 灰度图
- HSV: 色相饱和度明度
- LAB: 亮度A通道B通道(人眼感知)
这些脚本可以根据您的具体需求进行调整,包括文件类型、色彩模式、输出路径等。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播