吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 2731|回复: 39
收起左侧

[Python 原创] opencv改善pdf清晰度

  [复制链接]
www0313 发表于 2023-10-7 22:10
本帖最后由 www0313 于 2023-10-15 14:42 编辑

improve-pdf

介绍:

使用python脚本对pdf进行优化,提高pdf清晰度,使文字更加清晰,观感更佳。仅适用黑白扫描版pdf,且文字较清晰,若模糊会更加模糊。

原理:

pdf转成png图片
再使用opencv对图片局部阈值二值化处理
并去除孤立噪点,优化图片观感
最后转回pdf并合并,最终达到优化提高pdf清晰度的目的
(可选)使用potrace处理png转成svg矢量图,使文字线条平滑,观感大幅度提高,接近ocr pdf 。

脚本使用方法:

1.安装依赖

pip install opencv-python
pip install pymupdf

2.将pdf文件放入文件夹中,将doc_path改为pdf文件路径(不要使用中文路径,会报错)

doc_path = r"your pdf path"  # 相对路径删去r

3.运行脚本

推荐使用单任务多进程,默认满核运行处理速度更快,可自行修改,注意进程数不要超过cpu核心数

4.核心代码

        def change_image(self, index):
        try:
            img_files = sorted(os.listdir(self.img_path), key=self.numerical_sort)
            for i in index:
                i = img_files[i]
                if i.endswith(".png"):
                    img = cv2.imread(os.path.join(self.img_path, i), cv2.IMREAD_COLOR)
                    GrayImage = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
                    binary2 = cv2.adaptiveThreshold(
                        GrayImage,
                        255,
                        cv2.ADAPTIVE_THRESH_GAUSSIAN_C,
                        cv2.THRESH_BINARY,
                        55,
                        15,
                    )
                    cv2.imwrite(os.path.join(self.change_path, i), binary2)
                    print(f"正在二值化第{i}张图片")
        except Exception as e:
            print(f"二值化图片时出现错误: {e}")
    
    def erasure_image(self, threshold, index):
        try:
            img_files = sorted(os.listdir(self.change_path), key=self.numerical_sort)
            for i in index:
                i = img_files[i]
                if i.endswith(".png"):
                    img = cv2.imread(
                        os.path.join(self.change_path, i), cv2.IMREAD_COLOR
                    )
                    GrayImage = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
                    contours, hierarch = cv2.findContours(
                        GrayImage, cv2.RETR_TREE, cv2.CHAIN_APPROX_NONE
                    )
                    for j in range(len(contours)):
                        area = cv2.contourArea(contours[j])
                        if area < threshold:
                            cv2.drawContours(
                                img, [contours[j]], -1, (255, 255, 255), thickness=-1
                            )
                            continue
                    cv2.imwrite(
                        os.path.join(self.erasure_path, i),
                        img,
                        [cv2.IMWRITE_PNG_COMPRESSION, 9],
                    )
                    print(f"正在去除第{i}张图片黑点")
        except Exception as e:
            print(f"去除黑点时出现错误: {e}")

效果展示

二值化

javascript:;

portrace矢量化(脚本未集成,可自行下载处理二值化图片体验)

javascript:;

GUI

完整脚本
单文件gui在附件中

矢量化

矢量化

二值化

二值化

lianjie.txt

42 Bytes, 下载次数: 43, 下载积分: 吾爱币 -1 CB

gui

代码.txt

166 Bytes, 下载次数: 28, 下载积分: 吾爱币 -1 CB

完整代码

免费评分

参与人数 3吾爱币 +9 热心值 +3 收起 理由
junjia215 + 1 + 1 谢谢@Thanks!
苏紫方璇 + 7 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
xlln + 1 + 1 我很赞同!

查看全部评分

本帖被以下淘专辑推荐:

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

heavenman 发表于 2023-10-16 17:09
实际试了一下,确实总体清晰度有所提高,对一些扫描得不好、看起来有些残缺的pdf文件有点用处。 不过也不可能有本质的提高,毕竟不能无中生有。 我用了之后文件的尺寸会有明显的增大,相当于是以图片形式优化了每个pdf页面。   谢谢楼主。
bachelor66 发表于 2023-10-8 08:54
有没有成品程序呢?                        
yu520 发表于 2023-10-8 08:59
yhzh 发表于 2023-10-8 09:03
感谢分享。。。
MWH 发表于 2023-10-8 09:06
感谢分享
zhangxu0529 发表于 2023-10-8 09:22
PDF感觉处理后有点失真啊
moyc 发表于 2023-10-8 09:33
楼主就给个链接?
xingdonga 发表于 2023-10-8 10:08
本帖最后由 xingdonga 于 2023-10-8 10:09 编辑

链接打不开啊https://github.com/wangdada111/improve--pdf
xingdonga 发表于 2023-10-8 10:08
https://github.com/wangdada111/improve--pdf
lazychen 发表于 2023-10-8 11:41
很棒的软件  需要成品程序  小白不会用  求大大封装一下
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则 警告:本版块禁止灌水或回复与主题无关内容,违者重罚!

快速回复 收藏帖子 返回列表 搜索

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-4-29 07:56

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表