opencv-python 去除图片文字

本文介绍了一种使用OpenCV进行图片文字去除的方法,通过图像增强、Canny边缘检测、闭运算和图像修复等步骤,实现了从原图中去除文字的效果。详细展示了每一步的代码实现。


opencv-python 去除图片文字
思路: 原图增强后提取增强后图片的轮廓进行闭运算,闭运算后的图像当掩码来修复原图即可去除文字
图像增强代码链接
import numpy as np
import cv2
def replaceZeroes(data):
    min_nonzero = min(data[np.nonzero(data)])
    data[data == 0] = min_nonzero
    return data
def SSR(src_img, size):
    L_blur = cv2.GaussianBlur(src_img, (size, size), 0)
    img = replaceZeroes(src_img)
    L_blur = replaceZeroes(L_blur)
    dst_Img = cv2.log(img / 255.0)
    dst_Lblur = cv2.log(L_blur / 255.0)
    dst_IxL = cv2.multiply(dst_Img, dst_Lblur)
    log_R = cv2.subtract(dst_Img, dst_IxL)
    dst_R = cv2.normalize(log_R, None, 0, 255, cv2.NORM_MINMAX)
    log_uint8 = cv2.convertScaleAbs(dst_R)
    return log_uint8
if __name__ == '__main__':
    img = 'cavity.png'
    size = 3
    src_img = cv2.imread(img)
    b_gray, g_gray, r_gray = cv2.split(src_img)
    b_gray = SSR(b_gray, size)
    g_gray = SSR(g_gray, size)
    r_gray = SSR(r_gray, size)
    result = cv2.merge([b_gray, g_gray, r_gray])
    cv2.imshow('img', src_img)
    cv2.imshow('aaa', result)
    cv2.imwrite('cavity1.png', result)
    cv2.waitKey(0)
    cv2.destroyAllWindows()
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
对增强后图像进行Canny:
import cv2 as cv
img = cv.imread('cavity1.png', cv.IMREAD_GRAYSCALE)
canny_img = cv.Canny(img, 200, 150)
cv.imwrite('cavity2.png', canny_img)
    1
    2
    3
    4
对边缘图像进行闭运算得到掩码图:
import cv2 as cv
import numpy as np
img = cv.imread('cavity2.png', 1)
k = np.ones((3, 3), np.uint8)
img2 = cv.morphologyEx(img, cv.MORPH_CLOSE, k)  # 闭运算
cv.imwrite('cavity3.png', img2)
    1
    2
    3
    4
    5
    6
    7
对图像进行修复:
import cv2 as cv
def repair(path):
    img = cv.imread(path)
    b = cv.imread('cavity3.png',0)
    dst = cv.inpaint(img, b, 5, cv.INPAINT_TELEA)
    cv.imshow('dst', dst)
    cv.imwrite(f'repair_{path}', dst)
    cv.waitKey()
    cv.destroyAllWindows()
if __name__ == '__main__':
    repair('cavity.png')

### OpenCV-Python 实现车牌识别 #### 使用OpenCV-Python进行车牌识别的关键技术概述 在计算机视觉应用中,车牌识别是一个典型的任务。通过结合图像预处理、边缘检测以及深度学习模型,可以构建高效的车牌识别系统[^4]。 对于车牌识别系统的开发,通常分为几个主要阶段: - **图像获取**:从摄像头或其他设备捕获车辆图片- **预处理**:包括灰度转换、噪声去除等操作以提高后续处理的效果。 - **车牌定位**:利用形态学变换和轮廓分析找到疑似车牌区域。 - **字符分割与提取**:按照固定的比例或者其他方式分离出各个字符以便进一步识别。 - **字符识别**:采用OCR技术或机器学习分类器完成最终的文字解析工作。 下面给出一段简单的基于OpenCV-Python的车牌识别流程示例代码: ```python import cv2 from PIL import Image import numpy as np def preprocess_image(image_path): img = cv2.imread(image_path) gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # 将彩色图像转为灰度图 blurred = cv2.GaussianBlur(gray, (5, 5), 0) # 高斯模糊降噪 edged = cv2.Canny(blurred, 75, 200) # 边缘检测 return edged def find_license_plate(edged_img): contours, _ = cv2.findContours(edged_img.copy(), cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE) contour_data = [] for c in contours: peri = cv2.arcLength(c, True) approx = cv2.approxPolyDP(c, 0.018 * peri, True) if len(approx) == 4: # 假设车牌形状接近矩形 screenCnt = approx x,y,w,h = cv2.boundingRect(screenCnt) roi = edged[y:y+h,x:x+w] contour_data.append((screenCnt,roi)) sorted_contours = sorted(contour_data, key=lambda item:item[1].shape[0]*item[1].shape[1], reverse=True)[:3] return [c[0] for c in sorted_contours] def recognize_characters(plate_images): results = [] for plate_img in plate_images: pil_im = Image.fromarray(np.uint8(plate_img)).convert('L') text = pytesseract.image_to_string(pil_im, config='--psm 7') results.append(text.strip()) return ''.join(results) if __name__ == "__main__": image_file = "car.jpg" processed_image = preprocess_image(image_file) license_plates = find_license_plate(processed_image) recognized_text = "" if license_plates: plates_imgs = [processed_image[np.min(cnt[:, :, 1]):np.max(cnt[:, :, 1]), np.min(cnt[:, :, 0]):np.max(cnt[:, :, 0])] for cnt in license_plates] recognized_text = recognize_characters(plates_imgs) print(f"Recognized License Plate Text: {recognized_text}") ``` 这段程序展示了如何使用OpenCV库读取并处理输入图像,执行必要的预处理步骤(如颜色空间转换、滤波和平滑),并通过Canny算子查找潜在的车牌边界框。之后尝试从中挑选最有可能属于车牌的部分,并调用Tesseract OCR引擎来进行文字识别[^5]。 需要注意的是,实际部署时还需要考虑更多因素,例如光照条件变化的影响、不同国家和地区之间牌照格式差异等问题。此外,为了提升性能还可以引入更先进的算法和技术,像卷积神经网络(CNNs),用于更加精准地定位和识别人类难以辨认的小字体或特殊符号。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

微笑点燃希望

你的鼓励是我创作最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值