清晰度"/>
opencv改善pdf清晰度
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)continuecv2.imwrite(os.path.join(self.erasure_path, i),img,[cv2.IMWRITE_PNG_COMPRESSION, 9],)print(f"正在去除第{i}张图片黑点")except Exception as e:print(f"去除黑点时出现错误: {e}")
效果展示
更多推荐
opencv改善pdf清晰度
发布评论