秦一二 2024-05-09 15:10 采纳率: 50%
浏览 1
已结题

python将图片转换成Excel,有啥办法能优化一下出来的效果?

python将图片转换成Excel,有啥办法能优化一下出来的效果?

img

img


这和原图差的也太多了吧!

import cv2
import pytesseract
from PIL import Image
import openpyxl
# 读取图像
image = cv2.imread('D:\\1.jpg')
# 使用OpenCV进行图像预处理(例如灰度化、二值化等)
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
threshold = cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY_INV + cv2.THRESH_OTSU)[1]
# 保存预处理后的图像
cv2.imwrite('D:\\1_image.jpg', threshold)
# 使用pytesseract进行图像识别
data = pytesseract.image_to_string(Image.open('D:\\1_image.jpg'),lang='chi_sim')
# 创建Excel表格
workbook = openpyxl.Workbook()
sheet = workbook.active
# 将识别结果写入Excel表格
rows = data.split('\n')
for i, row in enumerate(rows):
    cells = row.split('\t')
    for j, cell in enumerate(cells):
        sheet.cell(row=i+1, column=j+1).value = cell
        print(cell)
workbook.save("D:\\24.5.9.xlsx")

  • 写回答

4条回答 默认 最新

  • 码农阿豪 Java领域优质创作者 2024-05-09 15:10
    关注
    让阿豪来帮你解答,本回答参考chatgpt3.5编写提供,如果还有疑问可以评论或留言
    回答: 针对这个问题,我们可以考虑一下以下几个办法来优化转换结果:
    1. 对图片进行处理:在使用OpenCV进行图像预处理时,我们可以尝试使用更适合当前图片的处理方式来提高转换结果的准确率。 例如,在这个问题给出的代码中,我们使用了灰度化和二值化处理图片,可能并不能很好的适应当前图片的特点。我们可以尝试使用模糊化、锐化、饱和度增强等处理方式来试图提高结果的质量。
    2. 调整识别语言:在使用pytesseract进行图像识别时,默认使用的语言是英文。对于中文的识别,我们需要手动指定中文语言包,否则会影响结果质量。 在这个问题给出的代码中,我们使用了“chi_sim”语言包进行中文识别。如果转换结果不符合预期,还可以尝试使用“eng”等其他语言包进行识别。
    3. 调整Excel输出格式:在将识别结果写入Excel表格时,我们可以考虑调整表格的样式,例如增加边框、对齐等,使得表格更加美观。 如下为优化后的代码样例:
    import cv2
    import pytesseract
    from PIL import Image
    import openpyxl
    # 读取图像
    image = cv2.imread('D:\\1.jpg')
    # 使用OpenCV进行图像预处理(尝试使用不同的处理方式来增强识别准确性)
    gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
    blur = cv2.GaussianBlur(gray, (3, 3), 0) # 模糊化处理
    binary = cv2.threshold(blur, 0, 255, cv2.THRESH_BINARY_INV + cv2.THRESH_OTSU)[1] # 二值化处理
    # 保存预处理后的图像
    cv2.imwrite('D:\\1_image.jpg', binary)
    # 使用pytesseract进行图像识别(尝试调整识别语言包)
    data = pytesseract.image_to_string(Image.open('D:\\1_image.jpg'), lang='chi_sim')
    # 创建Excel表格
    workbook = openpyxl.Workbook()
    sheet = workbook.active
    # 将识别结果写入Excel表格(尝试调整输出格式)
    rows = data.split('\n')
    for i, row in enumerate(rows):
        cells = row.split('\t')
        for j, cell in enumerate(cells):
            sheet.cell(row=i+1, column=j+1).value = cell
            sheet.cell(row=i+1, column=j+1).border = openpyxl.styles.Border(left=openpyxl.styles.Side(border_style='thin', color='000000'),
                                                                             right=openpyxl.styles.Side(border_style='thin', color='000000'),
                                                                             top=openpyxl.styles.Side(border_style='thin', color='000000'),
                                                                             bottom=openpyxl.styles.Side(border_style='thin', color='000000'))
            sheet.cell(row=i+1, column=j+1).alignment = openpyxl.styles.Alignment(horizontal='center',
                                                                                    vertical='center')
    workbook.save("D:\\24.5.9.xlsx")
    

    在这个样例中,我们使用了模糊化处理,边框增加和居中对齐等方式来优化转换结果的质量。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

问题事件

  • 系统已结题 5月17日
  • 已采纳回答 5月9日
  • 创建了问题 5月9日

悬赏问题

  • ¥15 django5安装失败
  • ¥15 Java与Hbase相关问题
  • ¥15 ANSYS分析简单钎焊问题
  • ¥20 bash代码推送不上去 git fetch origin master #失败了
  • ¥15 LOL外服加入了反作弊系统,现在游戏录像rofl文件离线都无法打开
  • ¥15 在centos7安装conda
  • ¥15 c#调用yolo3 dll文件获取的数据对不上
  • ¥20 WPF 如何实现多语言,label 和cs(live Charts)中是否都能翻译
  • ¥15 STM32F103上电短路问题
  • ¥15 打开软件提示错误:failed to get wglChoosePixelFormatARB