【图像预处理】图像毛发去除-超详细

提示:数据集使用HAM10000皮肤癌图像


前言

在深度学习进行数据集预处理时,针对皮肤病变的特征,常常会有毛发干扰,为了去除毛发特征,采用一些算法进行处理。
参考:
博客参考
github链接


一、第一步:安装cv2

示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。
安装 OpenCV:
最简单的方法是使用 pip 安装 OpenCV。在终端或命令提示符中运行以下命令:

pip install opencv-python

或者,如果你需要安装特定版本:

pip install opencv-python==<version>

其中 是你想要安装的 OpenCV 版本号

二、使用代码

1.单张图片处理

代码如下(示例):

import cv2
def DHR(imgpath,outpath):
    
    src = cv2.imread(imgpath)
    grayScale = cv2.cvtColor(src, cv2.COLOR_RGB2GRAY )
    cv2.imwrite("grey.jpg",grayScale)
    kernel = cv2.getStructuringElement(cv2.MORPH_CROSS,(10,10))
    blackhat = cv2.morphologyEx(grayScale, cv2.MORPH_BLACKHAT, kernel)
    cv2.imwrite("blackhat.jpg",blackhat)
    ret,thresh2 = cv2.threshold(blackhat,10,255,cv2.THRESH_BINARY)
    cv2.imwrite("threshold.jpg",thresh2)
    dst = cv2.inpaint(src,thresh2,1,cv2.INPAINT_TELEA)
    cv2.imwrite(outpath, dst, [int(cv2.IMWRITE_JPEG_QUALITY), 100])

结果如下图,依次处理流程为:
在这里插入图片描述

2.对每个分类子文件夹中的图片进行处理

代码如下(示例):

import cv2
import os

def DHR(imgpath, outpath):
    src = cv2.imread(imgpath)
    if src is None:
        print(f"无法加载图像: {imgpath}")
        return

    grayScale = cv2.cvtColor(src, cv2.COLOR_RGB2GRAY)
    kernel = cv2.getStructuringElement(cv2.MORPH_CROSS, (10, 10))
    blackhat = cv2.morphologyEx(grayScale, cv2.MORPH_BLACKHAT, kernel)
    ret, thresh2 = cv2.threshold(blackhat, 10, 255, cv2.THRESH_BINARY)
    dst = cv2.inpaint(src, thresh2, 3, cv2.INPAINT_TELEA)  # 使用3作为inpaint的半径
    cv2.imwrite(outpath, dst, [int(cv2.IMWRITE_JPEG_QUALITY), 100])

def process_images(input_dir, output_dir):
    # 确保输出目录存在
    if not os.path.exists(output_dir):
        os.makedirs(output_dir)

    # 递归遍历输入目录中的所有文件和文件夹
    for root, dirs, files in os.walk(input_dir):
        for filename in files:
            if filename.lower().endswith(('.png', '.jpg', '.jpeg', '.bmp', '.gif')):
                imgpath = os.path.join(root, filename)
                # 构造输出文件的路径
                # 保持原有分类结构
                relative_path = os.path.relpath(root, input_dir)
                output_subdir = os.path.join(output_dir, relative_path)
                if not os.path.exists(output_subdir):
                    os.makedirs(output_subdir)
                file_root, file_ext = os.path.splitext(filename)
                outpath = os.path.join(output_subdir, f"{file_root}.jpg")
                DHR(imgpath, outpath)
                print(f"处理完成: {imgpath} -> {outpath}")

if __name__ == '__main__':
    input_dir = '原图像文件夹路径'
    output_dir = '输出图像路径'
    process_images(input_dir, output_dir)

请注意,DHR 函数中的 cv2.inpaint 方法的半径参数已从 1 更改为 3,这是一个更常用的值,可能提供更好的填充效果。你可以根据你的具体需求调整这个值。

最后结果在output_dir文件夹内。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值