批量图片处理:使用 SSR 算法增强图像细节
import numpy as np
import cv2
import os
def replaceZeroes(data):
min_nonzero = min(data[np.nonzero(data)])
data[data == 0] = min_nonzero
return data
def SSR(src_img, size):
L_blur = cv2.GaussianBlur(src_img, (size, size), 0)
img = replaceZeroes(src_img)
L_blur = replaceZeroes(L_blur)
dst_Img = cv2.log(img/255.0)
dst_Lblur = cv2.log(L_blur/255.0)
dst_IxL = cv2.multiply(dst_Img,dst_Lblur)
log_R = cv2.subtract(dst_Img, dst_IxL)
dst_R = cv2.normalize(log_R,None,0,255,cv2.NORM_MINMAX)
log_uint8 = cv2.convertScaleAbs(dst_R)
return log_uint8
def batch_process_images(input_folder, output_folder, size):
if not os.path.exists(output_folder):
os.makedirs(output_folder)
for filename in os.listdir(input_folder):
if filename.endswith('.png') or filename.endswith('.jpg'):
img_path = os.path.join(input_folder, filename)
src_img = cv2.imread(img_path)
b_gray, g_gray, r_gray = cv2.split(src_img)
b_gray = SSR(b_gray, size)
g_gray = SSR(g_gray, size)
r_gray = SSR(r_gray, size)
result = cv2.merge([b_gray, g_gray, r_gray])
output_path = os.path.join(output_folder, filename)
cv2.imwrite(output_path, result)
if __name__ == '__main__':
input_folder = './gggg'
output_folder = './processed_images'
size = 3
batch_process_images(input_folder, output_folder, size)
该代码使用 SSR 算法对图片进行细节增强,并实现了批量处理图片的功能。具体步骤如下:
- 定义
replaceZeroes函数:该函数将图像中值为 0 的像素替换为最小非零值,防止出现除零错误。 - 定义
SSR函数:该函数实现 SSR 算法,对输入图像进行细节增强处理。 - 定义
batch_process_images函数:该函数接收输入文件夹、输出文件夹和核大小参数,对输入文件夹中的所有图片进行处理,并将处理后的图片保存到输出文件夹中。 - 主函数
if __name__ == '__main__'::定义输入文件夹、输出文件夹和核大小,并调用batch_process_images函数进行批量处理。
通过上述步骤,该代码可以对指定文件夹中的所有图片进行 SSR 算法处理,并保存处理后的图片到另一个文件夹。
注意:
- 需要确保
opencv-python库已安装。 - 可以根据需要修改输入文件夹、输出文件夹和核大小参数。
- 为了更好地理解代码,可以参考 SSR 算法的原理和相关资料。
- 此代码仅供参考,您可以根据自己的需求进行修改和完善。
原文地址: https://www.cveoy.top/t/topic/pgRW 著作权归作者所有。请勿转载和采集!