Guided image filtering 引导滤波算法实现图像细节增强

# 导入必要的库
import cv2  # 用于图像处理的OpenCV库
import glob  # 用于查找匹配某个模式的文件路径
import os  # 用于与操作系统交互
from tqdm import tqdm  # 导入tqdm库

# 设置输入和输出文件夹
# 定义要处理的文件夹列表
folders = ["train", "valid", "test"]

# 循环遍历每个文件夹
for folder in folders:
    input_folder = f"mydata/4/{folder}/images"
    output_folder = f"mydata/5/{folder}/images"

    if not os.path.exists(output_folder):  # 如果输出文件夹不存在,则创建它
        os.makedirs(output_folder)

    image_paths = glob.glob(os.path.join(input_folder, "*.jpg"))
    total = len(image_paths)
    with tqdm(total=total, desc="Processing images") as pbar:
        for img_path in image_paths:
            try:
                # 读取输入图像
                img = cv2.imread(img_path)  # 使用OpenCV将图像加载为NumPy数组

                # 转换为灰度图像
                input_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)  # 使用OpenCV将图像转换为灰度图像

                # 应用引导滤波器
                filtered = cv2.ximgproc.guidedFilter(guide=input_gray, src=input_gray, radius=64, eps=400)
                # 使用OpenCV的ximgproc模块应用引导滤波器以增强图像。
                # “guide”是输入图像,“src”是灰度图像。
                # “radius”控制滤波时考虑的邻域的大小。
                # “eps”是一个正则化参数,控制滤波的强度。

                # 增强细节
                details = cv2.subtract(input_gray, filtered)  # 从输入图像中减去滤波后的图像,得到细节图像。
                details = cv2.normalize(details, None, alpha=0, beta=255, norm_type=cv2.NORM_MINMAX)  # 对细节图像进行归一化。
                details = cv2.convertScaleAbs(details, alpha=1.5, beta=0)  # 使用缩放因子增强细节。
                details_bgr = cv2.cvtColor(details, cv2.COLOR_GRAY2BGR)  # 将细节图像转换为BGR颜色空间,以与原始图像合并。

                # 合并原始图像和增强细节
                output_image = cv2.addWeighted(img, 0.7, details_bgr, 0.3, 0)  # 使用OpenCV的addWeighted函数将原始图像和增强细节图像合并。
                # 前两个参数是输入图像,后面是每个图像的权重参数,最后是gamma值。

                # 将输出图像保存到输出文件夹
                output_path = os.path.join(output_folder, os.path.basename(img_path))  # 获取输出文件路径。
                cv2.imwrite(output_path, filtered)  # 将滤波后的图像写入
                #int i=0
                #print(i+1)  # Print a success message for each image processed.
                pbar.update(1)  # 更新总进度条
            except Exception as e:  # Handle errors gracefully.
                print(f"Error processing {img_path}: {e}")
print("Done!")  # Print a message when all images have been processed.

  • 5
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Arrowes

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值