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

如何用OpenCV修复车牌OCR预处理中的褪色字符?

车牌OCR预处理:修复褪色字符的通用方案

针对车牌OCR预处理中遇到的字符褪色、常规膨胀操作损伤清晰字符的问题,这里提供一套兼顾清晰字符保护与褪色字符修复的通用预处理方案,核心思路是通过局部对比度增强+针对性形态学操作替代单纯的阈值与膨胀:

问题分析

你当前的代码依赖自适应阈值处理,但对于低对比度的褪色字符,阈值化后容易丢失字符细节;而直接使用膨胀会无差别扩大所有字符边缘,破坏原本清晰的字符结构。

改进后的预处理代码

import cv2
import numpy as np

def image_preprocessing(image_path):
    # 读取图像并放大(保留原步骤,提升后续处理精度)
    img = cv2.imread(image_path)
    height, width, _ = img.shape
    img = cv2.resize(img, (width*6, height*6), interpolation=cv2.INTER_LINEAR)
    
    # 转灰度+局部对比度增强(解决褪色字符对比度低的问题)
    gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
    clahe = cv2.createCLAHE(clipLimit=2.0, tileGridSize=(8,8))
    enhanced_gray = clahe.apply(gray)
    
    # 自适应阈值化(保留局部细节)
    thresh = cv2.adaptiveThreshold(enhanced_gray, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, 
                                   cv2.THRESH_BINARY_INV, 21, 3)
    thresh = cv2.bitwise_not(thresh)
    
    # 针对性形态学操作:闭运算填充褪色字符的缺口,同时避免过度膨胀
    kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (2,2))
    closed = cv2.morphologyEx(thresh, cv2.MORPH_CLOSE, kernel)
    
    # 缩小回原尺寸+模糊降噪
    result = cv2.resize(closed, (width, height), interpolation=cv2.INTER_AREA)
    result = cv2.GaussianBlur(result, (3,3), 0)
    
    return result

关键步骤说明

  • CLAHE局部对比度增强:相比普通灰度化,它能在不提亮背景的前提下,增强褪色字符的局部对比度,让模糊的字符边缘更清晰。
  • 闭运算替代单纯膨胀:闭运算先膨胀后腐蚀,既能填充褪色字符的细小缺口,又能让膨胀后的字符边缘恢复到接近原尺寸,避免破坏清晰字符的轮廓。
  • 自适应阈值优化:改用高斯加权的自适应阈值,对光照不均的车牌鲁棒性更强。

效果对比(基于你的示例)

效果良好的场景

输入:效果良好的输入
输出:经过改进后,原清晰字符的边缘不会被过度破坏,保留完整细节。

效果不佳的褪色场景

输入:效果不佳的输入
输出:褪色的字符缺口会被闭运算填充,字符轮廓更完整,更适合OCR识别。

额外建议

如果部分车牌存在严重的污渍或背景干扰,可以在CLAHE后增加一步顶帽运算(cv2.morphologyEx(enhanced_gray, cv2.MORPH_TOPHAT, kernel)),进一步突出亮字符与暗背景的差异。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 23:47:33