You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Python的OpenCV为指甲数据集的所有图像设置统一背景色

解决方案

你可以通过HSV颜色空间分割提取指甲区域,再将非指甲区域替换为统一纯色的方案实现需求,全程保留224*224的图像尺寸不变。以下是修改后的完整预处理代码:

import numpy as np
import pandas as pd
import cv2
import pathlib  # 补充原代码遗漏的依赖导入

# 挂载Google Drive
from google.colab import drive
drive.mount('/content/gdrive')
root_path = 'gdrive/My Drive/Dataset/'

dataset_dir = pathlib.Path(root_path)

# 构造图像路径字典和标签对应字典,可自行扩展其他疾病分类
nail_disease_images_dict = {
    'clubbing': list(dataset_dir.glob('clubbing/*')),
    # 其他分类按格式添加即可
}
nail_disease_labels_dict = {
    'clubbing': 0,
    # 其他分类对应标签按格式添加即可
}

# 背景替换函数
def replace_background(img, bg_color=(255,255,255)):
    # 将BGR格式转为HSV格式方便颜色分割
    hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
    # 指甲属于肤色范围,设置HSV肤色阈值,可根据实际数据集调整
    lower_skin = np.array([0, 30, 70], dtype=np.uint8)
    upper_skin = np.array([20, 255, 255], dtype=np.uint8)
    # 生成指甲区域掩码
    mask = cv2.inRange(hsv, lower_skin, upper_skin)
    # 掩码取反得到背景区域
    bg_mask = cv2.bitwise_not(mask)
    # 替换背景为指定纯色
    img[bg_mask == 255] = bg_color
    return img

image_list, classes = [], []
IMG_WIDTH=224
IMG_HEIGHT=224

for disease_name, images in nail_disease_images_dict.items():
    for image in images:
        img = cv2.imread(str(image))
        resized_img = cv2.resize(img,(IMG_WIDTH,IMG_HEIGHT))
        # 调用背景替换函数处理
        processed_img = replace_background(resized_img)
        image_list.append(processed_img)
        classes.append(nail_disease_labels_dict[disease_name])

参数调整说明

  • 分割阈值:如果部分图像的指甲分割效果不佳,可适当调整lower_skin和upper_skin的数值,适配不同光照、色调的图像
  • 背景颜色:修改replace_background函数的bg_color参数即可更换统一背景色,参数格式为BGR顺序,比如(240,240,240)对应浅灰色

内容的提问来源于stack exchange,提问作者Pramodi Samaratunga

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 14:27:04