当前位置: 首页 > 知识库问答 >
问题:

python3.x - 如何提取图片中的数字?

彭高畅
2024-12-09

请将这个图片下载后,保存为 sample.png

from PIL import Image
import pytesseract
text=pytesseract.image_to_string(Image.open('sample.png'),lang='eng')  
print(text)

尝试另外一段代码

import cv2
import pytesseract
img = cv2.imread("/tmp/sample.png")
gry = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
thr = cv2.adaptiveThreshold(gry, 255, cv2.ADAPTIVE_THRESH_MEAN_C,
                            cv2.THRESH_BINARY_INV, 23, 100)
bnt = cv2.bitwise_not(thr)
txt = pytesseract.image_to_string(bnt, config="--psm 6")
res = ''.join(i for i in txt if i.isalnum())
print(res)

结果 ee ,差太远了。

没有任何结果,请问哪位可以提取这里面的字符?

共有2个答案

小牛23359
2024-12-09

运用了形态学操作中的腐蚀来去除经过处理之后网格所形成的白点,但是还是有一些误差,第三个字符'5' tesseract 会识别为'S',正在想办法改进算法。

import cv2
import pytesseract
pytesseract.pytesseract.tesseract_cmd = r'C:\Program Files\Tesseract-OCR\tesseract.exe'
image = cv2.imread('sample.png')
gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
inverted_image = cv2.bitwise_not(gray_image)
binary_image = cv2.adaptiveThreshold(inverted_image, 255, 
                                     cv2.ADAPTIVE_THRESH_GAUSSIAN_C, 
                                     cv2.THRESH_BINARY, 11, 2)
denoised_image = cv2.medianBlur(binary_image, 3)
kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (4, 4))
eroded_image = cv2.erode(denoised_image, kernel)
mask = (denoised_image == 255) & (eroded_image == 0)
denoised_image[mask] = 0
cv2.imwrite('preprocessed_image.png', denoised_image)
text = pytesseract.image_to_string(denoised_image, config='--psm 6')
print("result:", text.strip())

处理后的图片:
腐蚀前:腐蚀前
腐蚀后:腐蚀后

输出:

result: CRSP

注:
这段代码中运用了光学字符识别(OCR)引擎Tesseract,代码中的pytesseract.pytesseract.tesseract_cmd参数根据Tesseract安装位置更改。

谭兴学
2024-12-09

要提取图片中的数字,你可以尝试调整图像预处理的步骤,以提高 OCR(光学字符识别)的准确性。以下是一个更详细的示例,结合了 OpenCV 和 pytesseract 来处理图像并提取数字:

### 解决方案

你可以尝试以下代码,它使用了更复杂的图像预处理步骤来提高 OCR 的准确性:

import cv2
import pytesseract
import numpy as np

读取图像

img = cv2.imread('sample.png')

转换为灰度图像

gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

应用高斯模糊以减少噪声

blurred = cv2.GaussianBlur(gray, (5, 5), 0)

使用Otsu's二值化方法

ret3, binary = cv2.threshold(blurred, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU)

反转颜色(如果需要)

binary = cv2.bitwise_not(binary)

使用pytesseract提取文本

custom_config = r'--oem 3 --psm 6'
text = pytesseract.image_to_string(binary, config=custom_config, lang='eng')

提取并打印数字

digits = ''.join(filter(str.isdigit, text))
print("Extracted Digits:", digits)


### 解释

1. **读取图像**:使用 OpenCV 读取图像文件。
2. **转换为灰度图像**:将图像转换为灰度,因为 OCR 通常对灰度图像或二值图像效果更好。
3. **高斯模糊**:应用高斯模糊来减少图像中的噪声。
4. **Otsu's二值化**:使用 Otsu's 方法自动确定阈值并进行二值化。
5. **反转颜色**:有时反转颜色(白色文本变为黑色,黑色背景变为白色)可以提高 OCR 的准确性。
6. **使用 pytesseract 提取文本**:配置 pytesseract 以使用特定的 OCR 引擎和页面分割模式(PSM)。
7. **提取数字**:从提取的文本中过滤出数字。

这个代码示例可能需要根据实际的图像情况进行调整,比如调整模糊参数、二值化方法或 OCR 配置等。希望这能帮助你提取图片中的数字!
 类似资料:
  • 本文向大家介绍Python3.x爬虫下载网页图片的实例讲解,包括了Python3.x爬虫下载网页图片的实例讲解的使用技巧和注意事项,需要的朋友参考一下 一、选取网址进行爬虫 本次我们选取pixabay图片网站 二、选择图片右键选择查看元素来寻找图片链接的规则 通过查看多个图片路径我们发现取src路径都含有 https://cdn.pixabay.com/photo/ 公共部分且图片格式都为.jpg

  • 本文向大家介绍详解Python3中字符串中的数字提取方法,包括了详解Python3中字符串中的数字提取方法的使用技巧和注意事项,需要的朋友参考一下 逛到一个有意思的博客在里面看到一篇关于ValueError: invalid literal for int() with base 10错误的解析,针对这个错误,博主已经给出解决办法,使用的是re.sub 方法 但是没有说明什么含义,于是去查了其他的

  • 本文向大家介绍如何在JavaScript中获取图片数据网址?,包括了如何在JavaScript中获取图片数据网址?的使用技巧和注意事项,需要的朋友参考一下 若要使用javascript将图像从HTML页面标签转换为数据URI,首先需要创建一个canvas元素,将其宽度和高度设置为与图像相同,在其上绘制图像,最后在其上调用toDataURL方法。 这将返回图像的base64编码数据URI。例如,如果

  • 我试图使用OpenCV和Java实现一些图像处理,从图像中提取一张卡片。 以下是我的做法: 转换为BGR图像 转换为灰度图像 应用高斯模糊 应用Canny边缘检测 扩张 查找等高线 查找最大轮廓 使用approxpolydp查找最大轮廓的角 沿最大轮廓获取裁剪图像的自上而下视图 代码如下: 寻求帮助在获得适当的角顶点...提前感谢…

  • 以下Python3.x整数乘法的平均运算时间在1.66s到1.77s之间: 如果将替换为,则需要在和之间。怎么会呢? 另一方面,在Java中则相反:在Java中更快。Java测试链接:为什么在Java中2*(i*i)比2*i*i快? 我运行每个版本的程序10次,以下是结果。

  • 问题内容: 我想和到App Engine的工作之外。这些模块是否需要App Engine才能正常运行?我想在Google Cloud Storage上为图像创建公共的但不可猜测的URL,并通过Django提供它们。 我了解到这是通过和完成的。这是我到目前为止所拥有的: 并且image_url应该是我的图像的公共但不可猜测的URL。如果我运行此代码,则错误为 这表明blobstore需要代理(也称为

  • 本文向大家介绍iOS提取APP中的图片资源的方法,包括了iOS提取APP中的图片资源的方法的使用技巧和注意事项,需要的朋友参考一下 最近在学习swift的过程中,准备通过模仿一个app来实战一下,于是我去下载了一个斗鱼直播,不是打广告.....因为模仿嘛,所以就需要获取其中的图片资源,本以为能很顺利的得到,没想到还是遇到了一个小麻烦,兴庆的是还是找到很好的办法来解决,下面就来记录下获取app中图片

  • 我有一个字符串。我想从中提取。为此,我正在努力 但是在输出上我得到了。 我怎样才能走出地狱世界。 谢谢