提示:数据集使用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文件夹内。