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

如何用Python+OpenCV提取5×6共30个贴纸并优化阈值化效果

解决方案:优化阈值提取+批量切割贴纸

一、解决阈值化模糊与灰色残留问题

原始阈值化的问题多因光照不均+未做预处理导致,改用自适应阈值+预处理去噪可彻底解决:

  1. 先将图像转为灰度图,消除色彩干扰
  2. 用高斯模糊预处理,过滤细微噪点,避免文字边缘模糊
  3. 使用自适应阈值(根据局部区域亮度动态调整阈值),彻底去除灰色背景,同时保留清晰的文字边缘

二、批量切割为5行6列单张贴纸

因为贴纸是固定的5×6布局,直接计算单张贴纸的宽高,循环遍历每个位置切片即可:

  1. 获取预处理后图像的总宽高
  2. 计算单张贴纸宽度=总宽度÷6,高度=总高度÷5
  3. 嵌套循环遍历行(0-4)和列(0-5),截取对应区域并保存

完整代码实现

import cv2
import numpy as np

# 读取原始图像(替换为你的本地路径)
img = cv2.imread("ng7oV.jpg")
# 转为灰度图
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# 高斯模糊去噪,3×3核兼顾去噪与文字细节保留
blurred = cv2.GaussianBlur(gray, (3, 3), 0)
# 自适应阈值处理:解决光照不均导致的灰色区域,反二值化保留白色贴纸背景
thresh = cv2.adaptiveThreshold(blurred, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY_INV, 11, 2)

# 计算单张贴纸尺寸
rows, cols = thresh.shape
sticker_width = cols // 6
sticker_height = rows // 5

# 批量切割并保存
for i in range(5):  # 遍历5行
    for j in range(6):  # 遍历6列
        # 计算当前贴纸的坐标范围
        y_start = i * sticker_height
        y_end = y_start + sticker_height
        x_start = j * sticker_width
        x_end = x_start + sticker_width
        # 截取单张贴纸区域
        sticker = thresh[y_start:y_end, x_start:x_end]
        # 保存文件(可自定义路径和命名规则)
        cv2.imwrite(f"sticker_row{i+1}_col{j+1}.png", sticker)

# 可选:预览处理效果
cv2.imshow("Processed Threshold Image", thresh)
cv2.imshow("Sample Sticker", sticker)
cv2.waitKey(0)
cv2.destroyAllWindows()

关键参数微调提示

  • 高斯模糊核(3,3):若噪点较多可改为(5,5),但会轻微损失文字细节
  • 自适应阈值的11(局部区域大小,必须为奇数)和2(阈值偏移量):若仍有灰色残留,可尝试增大11或减小2

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 09:20:33