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日

相关文章

  • 查找NumPy数组中的唯一行

    要查找NumPy数组中的唯一行,可以使用numpy.unique函数。该函数返回输入数组中的唯一行。以下是查找NumPy数组中唯一行的完整攻略: 步骤一:导入NumPy模块 在使用NumPy模块之前,首先需要导入该模块。可以使用如下代码导入NumPy: import numpy as np 步骤二:创建NumPy数组 在查找NumPy数组中的唯一行之前,首先…

    python-answer 2023年3月25日
    00
  • 如何交换一个给定的NumPy数组的列

    交换一个给定的NumPy数组的列可以通过多种方式实现,下面是一种基于NumPy库的方法: 步骤1:加载NumPy库 首先需要加载NumPy库,以便使用其数组操作相关的函数。 import numpy as np 步骤2:创建一个NumPy数组 接下来需要创建一个给定的NumPy数组,下面是一个示例: arr = np.array([[1, 2, 3], [4…

    python-answer 2023年3月25日
    00
  • python not运算符的实例用法

    在Python中,not运算符是一个逻辑运算符,用于对布尔值进行取反操作。本文将详细介绍not运算符的实例用法,并提供两个示例说明。 1. not运算符的基本用法 not运算符的基本用法如下: not x 其中,x是布尔值,not运算符对x进行取反操作,返回一个相反的布尔值。 2. not运算的实例用法 2.1 判断列表是否为空 以下是一个使用not运算符判…

    python 2023年5月14日
    00
  • 详解Python PIL putalpha()方法

    Python PIL putalpha() 方法 putalpha() 方法是 Python Pillow 中的一种图像操作方法,用于为指定的图像数据设置 alpha 通道值。该方法可以接受一个参数值 alpha,用于设置要应用的 alpha 值,在应用 alpha 值时,必须保证图像已经裁剪,否则可能会导致数据无法准确设置。该方法通常用于将图像设置为半透明…

    python-answer 2023年3月25日
    00
  • Python模拟登录requests.Session应用详解

    以下是关于Python模拟登录requests.Session应用详解: Python模拟登录requests.Session应用详解 在Python中,requests是一个流行的HTTP库,可以用于向Web发送HTTP请求和接响应。在模拟登录时,我们可以使用requests.Session来保持会话状态。以下是Python模拟登录requests.Ses…

    python 2023年5月14日
    00
  • 一文解决Python切换版本问题

    一文解决Python切换版本问题 背景 在开发Python应用程序时,我们常常需要切换不同版本的Python环境,以满足不同的开发需求。 但是,每次手动切换Python环境非常麻烦。如果我们想要快速简便地切换Python环境,该怎么办呢? 解决方案 我们可以使用工具 pyenv 来管理Python环境。pyenv 可以方便地安装、切换和管理不同版本的Pyth…

    python 2023年5月14日
    00
  • Python自动创建Excel并获取内容

    下面我将为您详细讲解Python自动创建Excel并获取内容的完整实例教程。 1.使用Python库xlwt创建Excel文件 通过Python库xlwt,可以自动创建Excel表格并对其进行编辑和填充。以下是创建一个包含3行3列的Excel表格的Python代码示例: # 引入xlwt库 import xlwt # 创建一个workbook对象,相当于创建…

    python 2023年5月13日
    00
  • python基础之引用和匿名函数

    Python是一种开源、面向对象、解释型编程语言,被广泛应用于Web开发、数据科学、人工智能等领域。在Python中,引用和匿名函数是非常重要的基础知识,下面就来详细讲解一下。 引用 在Python中,所有的变量都是对象,每个对象拥有一个内存地址,可以通过变量名访问到该变量。引用是指某个变量指向的那个对象的地址。在Python中,变量可以被赋值为其它变量的值…

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