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

基于MNIST的CNN模型数字图像鲁棒分割技术及代码需求

统一数字序列图像分割方案(适配彩色/二值图)

核心处理逻辑

先将所有输入图像归一化为灰度图,通过自适应阈值消除阴影与光照不均,再用形态学操作去除噪声,最后通过轮廓检测提取单个数字。整套流程无需区分彩色/二值图,实现统一处理。

分步操作说明

  • 灰度归一化:无论输入是RGB彩色图还是二值图,先转为单通道灰度图,统一后续处理链路。
  • 自适应阈值去阴影:用高斯自适应阈值替代全局阈值,能在保留数字细节的同时,有效抵消图像中的阴影和光照差异,生成干净的二值图。
  • 形态学去噪:通过开运算(先腐蚀后膨胀)过滤小噪声点,同时规整数字边缘。
  • 轮廓检测与分割:提取图像中外围轮廓,过滤面积过小的噪声轮廓,按水平坐标排序保证数字顺序,最后截取每个数字区域并调整为MNIST模型要求的28x28尺寸。

实现代码(Python+OpenCV)

import cv2
import numpy as np

def process_and_split_digits(image_path):
    # 读取图像并统一转灰度
    img = cv2.imread(image_path)
    gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) if len(img.shape) == 3 else img

    # 自适应阈值处理,消除阴影
    thresh_img = cv2.adaptiveThreshold(
        gray, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C,
        cv2.THRESH_BINARY_INV, 11, 4
    )

    # 形态学开运算去噪
    kernel = np.ones((2, 2), np.uint8)
    cleaned_img = cv2.morphologyEx(thresh_img, cv2.MORPH_OPEN, kernel, iterations=1)

    # 提取并筛选轮廓
    contours, _ = cv2.findContours(cleaned_img, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
    valid_contours = sorted(
        [cnt for cnt in contours if cv2.contourArea(cnt) > 50],
        key=lambda x: cv2.boundingRect(x)[0]
    )

    # 分割数字并转为MNIST格式
    digit_list = []
    padding = 5
    for cnt in valid_contours:
        x, y, w, h = cv2.boundingRect(cnt)
        # 给数字添加 padding,避免边缘截断
        x = max(0, x - padding)
        y = max(0, y - padding)
        w += 2 * padding
        h += 2 * padding
        digit = cleaned_img[y:y+h, x:x+w]
        # 调整为28x28尺寸,保持宽高比避免拉伸
        digit = cv2.resize(digit, (28, 28), interpolation=cv2.INTER_AREA)
        # 统一为MNIST黑底白字格式
        digit = 255 - digit if np.mean(digit) > 127 else digit
        digit_list.append(digit)
    
    return digit_list

# 测试示例
if __name__ == "__main__":
    # 替换为你的图像路径,彩色/二值图均可
    digits = process_and_split_digits("digit_sequence.png")
    # 遍历分割结果,可直接输入CNN模型预测
    for idx, digit in enumerate(digits):
        cv2.imshow(f"分割数字 {idx+1}", digit)
    cv2.waitKey(0)
    cv2.destroyAllWindows()

参数调整提示

  • 自适应阈值的blockSize(需为奇数)和C:阴影严重时可增大blockSize,调整C控制阈值偏移量;
  • 形态学核尺寸:噪声较多时可适当调大kernel;
  • 轮廓面积阈值:根据图像中数字的实际大小调整,过滤无效噪声轮廓;
  • padding值:避免数字边缘被截断,保证分割完整性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 19:51:09