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

如何简化ECG样本图像的二值化流程?Python+OpenCV优化

简洁版ECG图像二值化实现

针对你提供的ECG图像,这里有更简洁的二值化实现方案,既能匹配目标效果,又能消除原代码中的重复冗余步骤:

优化后代码

import cv2
import numpy as np

# 加载图像并转灰度
img = cv2.imread('src.png')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

# 高斯模糊去除噪声
blurred = cv2.GaussianBlur(gray, (3, 3), 0)

# **自适应阈值处理**——替代多次固定阈值,自动适配局部区域差异
thresh = cv2.adaptiveThreshold(blurred, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C,
                               cv2.THRESH_BINARY_INV, 11, 2)

# 形态学闭操作修复波形断裂,清除小噪点
kernel = np.ones((3, 3), np.uint8)
final_result = cv2.morphologyEx(thresh, cv2.MORPH_CLOSE, kernel)

优化思路说明

  • 替换多次固定阈值为自适应阈值:原代码反复执行模糊+固定阈值操作,手动调试多个阈值参数效率低。自适应阈值会根据每个像素的局部邻域计算阈值,能更好地处理ECG图中网格线与波形的明暗差异,一步到位替代多次重复操作。
  • 精简流程:仅保留必要的噪声去除、阈值分割和形态学修复步骤,去掉无意义的重复模糊+阈值操作,代码更易读、维护性更强。
  • 核心效果一致:高斯模糊过滤高频噪声,形态学闭操作填补波形的细小断裂,最终输出的二值化图与目标效果匹配。

可选:封装复用函数

如果后续需要处理同类型图像,可将模糊+阈值的逻辑封装成函数,便于复用:

def adaptive_threshold_process(img, blur_size=(3,3), block_size=11, c_value=2):
    blurred = cv2.GaussianBlur(img, blur_size, 0)
    return cv2.adaptiveThreshold(blurred, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C,
                                 cv2.THRESH_BINARY_INV, block_size, c_value)

# 使用示例
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
thresh_img = adaptive_threshold_process(gray)
final_result = cv2.morphologyEx(thresh_img, cv2.MORPH_CLOSE, np.ones((3,3), np.uint8))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 03:25:19