Python+opencv 实现图片文字的分割的方法示例

  1. 导入必要的库

在使用Python+opencv实现图片文字的分割之前,首先要导入必要的库。通常需要使用的库包括cv2numpyPILmatplotlib,其中cv2为opencv对Python的接口。

import cv2
import numpy as np
from PIL import Image
import matplotlib.pyplot as plt
  1. 读取图片并进行灰度处理

使用opencv读取图片,将其转为灰度图像。

img = cv2.imread('test.png')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
  1. 图像二值化

为了能够更好的从图像中分离文字,通常需要二值化图像。可以使用大津算法(Otsu)来自动找到最佳的阈值。

ret, binary = cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY_INV + cv2.THRESH_OTSU)
  1. 进行形态学操作

使用形态学操作来进行图像处理,进一步分离文字。通常使用开运算和闭运算。

kernel = np.ones((3, 3), np.uint8)
opening = cv2.morphologyEx(binary, cv2.MORPH_OPEN, kernel, iterations=2)
closing = cv2.morphologyEx(opening, cv2.MORPH_CLOSE, kernel, iterations=2)
  1. 查找轮廓并剪切图像

查找轮廓,并根据轮廓信息,剪切分离出来的文字。

contours, hierarchy = cv2.findContours(closing, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
for i, contour in enumerate(contours):
    x, y, w, h = cv2.boundingRect(contour)
    if w < 10 or h < 10:
        continue
    cv2.rectangle(img, (x, y), (x + w, y + h), (0, 255, 0), 2)
    crop_img = img[y:y+h, x:x+w]
    cv2.imwrite('crop' + str(i) + '.png', crop_img)

通过以上的步骤,就可以实现将图片中的文字分割出来,并保存到单独的图像文件中。

示例1:

图像地址:https://cdn.pixabay.com/photo/2018/01/12/10/19/ford-3089868_960_720.jpg

img = cv2.imread('ford-3089868_960_720.jpg', cv2.IMREAD_COLOR)
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
ret, binary = cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY_INV + cv2.THRESH_OTSU)
kernel = np.ones((3, 3), np.uint8)
opening = cv2.morphologyEx(binary, cv2.MORPH_OPEN, kernel, iterations=2)
closing = cv2.morphologyEx(opening, cv2.MORPH_CLOSE, kernel, iterations=2)
contours, hierarchy = cv2.findContours(closing, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
for i, contour in enumerate(contours):
    x, y, w, h = cv2.boundingRect(contour)
    if w < 10 or h < 10:
        continue
    cv2.rectangle(img, (x, y), (x + w, y + h), (0, 255, 0), 2)
    crop_img = img[y:y+h, x:x+w]
    cv2.imwrite('crop' + str(i) + '.png', crop_img)
plt.imshow(cv2.cvtColor(img, cv2.COLOR_BGR2RGB))
plt.show()

示例2:

图像地址:https://cdn.pixabay.com/photo/2015/02/18/12/38/wood-640828_960_720.jpg

img = cv2.imread('wood-640828_960_720.jpg', cv2.IMREAD_COLOR)
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
ret, binary = cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY_INV + cv2.THRESH_OTSU)
kernel = np.ones((3, 3), np.uint8)
opening = cv2.morphologyEx(binary, cv2.MORPH_OPEN, kernel, iterations=2)
closing = cv2.morphologyEx(opening, cv2.MORPH_CLOSE, kernel, iterations=2)
contours, hierarchy = cv2.findContours(closing, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
for i, contour in enumerate(contours):
    x, y, w, h = cv2.boundingRect(contour)
    if w < 10 or h < 10:
        continue
    cv2.rectangle(img, (x, y), (x + w, y + h), (0, 255, 0), 2)
    crop_img = img[y:y+h, x:x+w]
    cv2.imwrite('crop' + str(i) + '.png', crop_img)
plt.imshow(cv2.cvtColor(img, cv2.COLOR_BGR2RGB))
plt.show()

通过以上两个示例,可以看到通过Python+opencv实现图片文字的分割,可以在图片中准确的分离出每个字,并保存为单独的图像文件。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python+opencv 实现图片文字的分割的方法示例 - Python技术站

(0)
上一篇 2023年5月19日
下一篇 2023年5月19日

相关文章

  • 聊聊Python中关于a=[[]]*3的反思

    下面是详细的攻略: 1. 概述 在Python中,定义一个列表a时,如果使用a=[[]]*3,那么实际上创建的是包含3个空列表的大列表,即下面这样: a = [[], [], []] 但是,这里会涉及到一个坑点,即这3个子列表是共享同一内存地址的,因此对一个子列表的修改,会影响到其他的子列表。这个坑点的主要原因是,*操作符实际上将列表复制了3次,但是这3个复…

    python 2023年6月6日
    00
  • python实现中文转换url编码的方法

    当我们需要在使用python操作url时,常常需要对中文进行url编码,以确保url的正确性和可读性。其中最常用的编码方式就是URL编码(也称百分号编码)。 以下是实现中文转换url编码的方法: 步骤1: 导入urllib.parse模块 在python中,实现URL编码需要用到urllib.parse模块。 import urllib.parse 步骤2:…

    python 2023年5月31日
    00
  • python实现图片变亮或者变暗的方法

    Python 实现图片变亮或者变暗的方法有很多种,这里我们介绍两种方法: 方法一:使用Pillow库 Pillow是Python下的一个图像处理库,在实现图片变亮或变暗时非常方便。 安装Pillow库 首先需要安装Pillow库,可以使用pip进行安装。在命令行中输入以下指令即可: pip install Pillow 如果出现了“No module nam…

    python 2023年5月19日
    00
  • python操作手机app的实现步骤

    要实现Python操作手机App的功能,需要按以下步骤进行: 安装Appium及其依赖 Appium是一个用于自动化移动应用程序测试的工具,支持iOS和Android平台。为了使用Python操作手机App,需要在电脑上安装Appium及其相关依赖。具体步骤可以参考Appium官方文档。 连接手机并开启USB调试 在操作手机App之前,必须将手机连接到电脑,…

    python 2023年6月2日
    00
  • 如何用python GUI(tkinter)写一个闹铃小程序(思路详解)

    下面是使用Python GUI库Tkinter来编写一个闹铃小程序的思路和具体流程。 1. 准备工作 首先要安装Python的Tkinter库,打开命令行,输入以下命令: pip install tkinter 安装成功后,就可以使用Tkinter库了。 2. 布局界面 我们可以使用Tkinter库提供的布局管理器来进行界面的设计。在闹钟小程序的界面中,可以…

    python 2023年6月13日
    00
  • Python实现批量采集商品数据的示例详解

    Python实现批量采集商品数据的示例详解 在电商行业,我们经常需要采集大量商品数据。本文将介绍如何使用Python实现批量采集商品数据,包括如何使用requests库发送HTTP请求、如何使用BeautifulSoup库解析HTML响应、如何使用pandas库将数据保存到CSV文件中,并提供两个示例代码。 步骤1:导入必要的库 在使用Python实现批量采…

    python 2023年5月15日
    00
  • 超详细图解修改pip install默认安装路径的方法

    修改 pip install 默认安装路径可以让我们在安装 Python 包的时候自定义安装路径,避免安装在系统默认路径中出现混乱。 下面是超详细图解修改 pip install 默认安装路径的方法: 1. 查找 pip 的配置文件 首先需要找到 pip 的配置文件,我们可以进入 Python 安装路径下的 scripts 文件夹,找到 pip.exe 文件…

    python 2023年5月14日
    00
  • 17条提高工作效率的Python技巧分享

    这里是 “17条提高工作效率的Python技巧分享”的完整攻略。 1. 使用Jupyter Notebook Jupyter Notebook是一个强大的交互式笔记本,非常适合Python编程。通过在笔记本上编写和测试代码,可以更快地开发和调试Python程序,使工作效率更高。 2. 使用虚拟环境 使用虚拟环境可以避免不同Python包的版本冲突,提高代码的…

    python 2023年5月13日
    00
合作推广
合作推广
分享本页
返回顶部