import cv2
import os
import numpy as np
from tqdm import tqdm
def is_mostly_black(image, threshold=0.30):
"""
判断图像是否大部分区域都是黑色
:param image: NumPy数组或PIL图像对象
:param threshold: 阈值,大部分区域被认为是黑色的阈值
:return: 如果大部分区域都是黑色返回True,否则返回False
"""
# 如果输入是NumPy数组,检查其形状以确定通道数
if image.shape[-1] == 3:
# RGB彩色图像
gray_image = cv2.cvtColor(image, cv2.COLOR_RGB2GRAY)
elif len(image.shape) == 2:
# 灰度图像
gray_image = image
else:
raise ValueError("Unsupported image format")
# 计算黑色像素的比例
black_pixel_ratio = np.sum(gray_image < 50) / gray_image.size
return black_pixel_ratio > threshold
def process_images_in_folder(input_folder, output_folder, size):
"""
遍历输入文件夹中的所有图像文件并对它们进行处理。
参数:
input_folder (str): 输入文件夹的路径。
output_folder (str): 输出文件夹的路径,用于保存处理后的图像。
size (int): 切分小图的大小。
返回:
None
"""
# 确保输出文件夹存在,如果不存在则创建它
if not os.path.exists(output_folder):
os.makedirs(output_folder)
# 获取输入文件夹中的所有文件
image_files = [f for f in os.listdir(input_folder) if os.path.isfile(os.path.join(input_folder, f))]
# 创建进度条
progress_bar = tqdm(total=len(image_files), desc="Processing Images")
for image_file in image_files:
# 仅处理图像文件(可以根据需要扩展支持的文件类型)
if image_file.endswith((".jpg", ".jpeg", ".png", ".bmp", ".tif")):
image_path = os.path.join(input_folder, image_file)
# 读取输入图像
input_image = cv2.imread(image_path, cv2.IMREAD_UNCHANGED)
# 获取输入图像的大小
image_height, image_width = input_image.shape
overlap = 0 # 重叠部分的大小,这里设置为四分之一的大小
# 计算需要切分的小图的行数和列数
rows = image_height // (size - overlap)
cols = image_width // (size - overlap)
# 循环切分图像
for i in range(rows):
for j in range(cols):
left = j * (size - overlap)
upper = i * (size - overlap)
right = left + size
lower = upper + size
# 切分小图
small_image = input_image[upper:lower, left:right]
# 检查图像是否大部分区域都是黑色
if not is_mostly_black(small_image):
# 生成唯一的输出文件名
filename, file_extension = os.path.splitext(image_file)
output_image_path = os.path.join(output_folder, f"{filename}_image_{i}_{j}.bmp")
# 保存小图
cv2.imwrite(output_image_path, small_image)
# 更新进度条
progress_bar.update(1)
# 关闭进度条
progress_bar.close()
if __name__ == "__main__":
input_folder = "" # 输入文件夹的路径
output_folder = "" # 输出文件夹的路径
size = 640 # 切分小图的大小 (640x640)
process_images_in_folder(input_folder, output_folder, size)
python实现将高分辨率图片切分为指定大小。
最新推荐文章于 2024-08-05 23:13:57 发布