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

yizhihongxing
  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合并同类型excel表格的方法

    下面是Python合并同类型Excel表格的方法的完整实例教程: 1. 准备工作 在开始之前,我们需要安装几个Python库:pandas,os,glob。可以使用下面的命令进行安装: pip install pandas pip install os pip install glob 同时,我们也需要准备一些测试数据。这里假设我们有两个相同类型的Excel…

    python 2023年5月13日
    00
  • python小程序实现刷票功能详解

    Python小程序实现刷票功能详解 如果你正在寻找一些刷票的Python小程序代码,那么你来到了正确的地方。这篇文章将为你提供一系列的示例和说明,让你了解如何通过Python编写一个简单的刷票程序。 步骤1:选择一个要刷的网站 首先,你需要确定一个要进行刷票的网站。在选择网站时,需要注意选择正规的、合法的,不会侵犯他人利益的网站。否则,你会处于违法和不道德的…

    python 2023年5月23日
    00
  • python 多线程重启方法

    Python是一种单线程语言,但是它提供了多线程编程的实现机制。当Python程序需要同时处理多个任务时,可以使用多线程编程技术,多个共享内存资源的线程可以同时执行,提高了程序的执行效率。但是多线程编程也会引发一些问题,比如多线程竞争、线程死锁等。本攻略将会详细讲解Python多线程的重启方法,以及重启方法的两个示例说明。 什么是线程重启? 多线程编程中,当…

    python 2023年5月18日
    00
  • python线程池如何使用

    让我来为您介绍如何使用 Python 线程池。 什么是线程池 线程池是一种预先分配了一组线程的技术,可用于执行许多异步操作,从而不必每次都创建新的线程,这节省了时间和资源。 Python中的线程池 Python标准库中提供了 concurrent.futures 模块,该模块有两个类:ThreadPoolExecutor 和 ProcessPoolExecu…

    python 2023年6月6日
    00
  • Python3写入文件常用方法实例分析

    Python3写入文件常用方法实例分析 在Python中,写入文件是一个非常常见的操作。我们可以使用Python内置的open()函数来打开文件,然后使用不同的方法将数据写入到文件中。在本文中,我将为大家介绍Python3写入文件的常用方法,并提供实例分析来加深对这些方法的理解。 方法一:write()函数 write()函数是Python内置的基本函数之一…

    python 2023年6月5日
    00
  • JSONLINT:python的json数据验证库实例解析

    JSONLINT:python的json数据验证库实例解析 JSONLINT是一个Python的json数据验证库,可以方便地验证JSON格式的数据是否合法。使用JSONLINT可以大大提高开发效率,减少数据格式错误的出现。下面将详细介绍JSONLINT的使用方法及示例。 安装JSONLINT 首先需要安装JSONLINT库。使用pip进行安装即可。 pip…

    python 2023年6月3日
    00
  • Python制作一个仿QQ办公版的图形登录界面

    下面是Python制作一个仿QQ办公版的图形登录界面的完整攻略: 第一步:选择GUI库 制作图形登录界面需要使用Python的GUI库。常用的GUI库有Tkinter、PyQt、wxPython等。其中,Tkinter是Python默认自带的GUI库,使用方便,适合初学者。本攻略使用Tkinter进行制作。 第二步:设计登录界面 设计登录界面需要考虑UI风格…

    python 2023年6月5日
    00
  • 详解Python对JSON中的特殊类型进行Encoder

    让我来详细讲解一下“详解Python对JSON中的特殊类型进行Encoder”的完整攻略。 什么是JSON JSON是一个轻量级的数据交换格式,它基于JavaScript语言的一个子集。JSON由“名/值”对组成(键值对),并使用大括号表示对象,中括号表示数组。JSON的设计目标是易于读取和编写,同时也易于机器解析和生成。 为什么需要对JSON中的特殊类型进…

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