当前位置: 首页 > news >正文

记录一个为打印高清而做投喂图像增强的例子

最近偶然接触到一个需求,打印机打印结果不清晰。需要打印之前做一下处理。
第一个想法是DPI 不够?
第二个想法是不要直接打印,转成PDF 后投喂打印?
第三个想法是先做打印前的增强处理。
总之就是输入到打印机的图片还是别jpge格式了吧,no 压缩,用tif或者pdf 挺好的。然后需要做一下打印前的增强工作。
下面有两段源码,测试了一下,有一个明显的效果。具体如下:
(1)输入输出都是jpg(我是觉得给打印机就不要这个格式了,但是有时候不得已)

import cv2
import numpy as np
from PIL import Imagedef upscale_image(img, target_dpi=300, original_dpi=96):# 基于 DPI 比例进行图像放大scale = target_dpi / original_dpinew_size = (int(img.shape[1] * scale), int(img.shape[0] * scale))return cv2.resize(img, new_size, interpolation=cv2.INTER_CUBIC)def enhance_saturation(img, factor=1.2):# HSV 模式增强饱和度hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV).astype(np.float32)h, s, v = cv2.split(hsv)s *= factors = np.clip(s, 0, 255)enhanced = cv2.merge([h, s, v])return cv2.cvtColor(enhanced.astype(np.uint8), cv2.COLOR_HSV2BGR)def apply_clahe(img):# LAB空间增强亮度细节(自适应直方图均衡)lab = cv2.cvtColor(img, cv2.COLOR_BGR2LAB)l, a, b = cv2.split(lab)clahe = cv2.createCLAHE(clipLimit=2.0, tileGridSize=(8,8))l2 = clahe.apply(l)lab_enhanced = cv2.merge((l2, a, b))return cv2.cvtColor(lab_enhanced, cv2.COLOR_LAB2BGR)def unsharp_mask(img, sigma=1.0, strength=1.5):# 高斯模糊 + 反差增强blurred = cv2.GaussianBlur(img, (0, 0), sigma)sharpened = cv2.addWeighted(img, 1 + strength, blurred, -strength, 0)return sharpeneddef rgb_to_cmyk_pil(img_path, save_path='cmyk_preview.jpg'):# 使用 PIL 模拟转换为 CMYK 并保存rgb = Image.open(img_path).convert('RGB')cmyk = rgb.convert('CMYK')cmyk.save(save_path)print(f"CMYK模拟图已保存为: {save_path}")def process_image_for_printing(input_path, output_path='output_print_ready.jpg'):img = cv2.imread(input_path)print("[INFO] 原始图像尺寸:", img.shape)# 1. 放大到适合打印的分辨率img = upscale_image(img, target_dpi=300)print("[INFO] 已进行分辨率放大")# 2. 增强饱和度img = enhance_saturation(img, factor=1.2)print("[INFO] 已增强色彩饱和度")# 3. CLAHE 亮度细节增强img = apply_clahe(img)print("[INFO] 已增强亮度细节 (CLAHE)")# 4. 锐化图像img = unsharp_mask(img, sigma=1.0, strength=1.2)print("[INFO] 已进行图像锐化 (Unsharp Mask)")# 5. 保存增强后的图像(BGR 转 RGB)cv2.imwrite(output_path, img)print(f"[INFO] 处理完成,输出文件保存为:{output_path}")# 6. 可选:CMYK 模拟转换rgb_to_cmyk_pil(output_path, save_path='cmyk_preview.jpg')# 运行示例
if __name__ == '__main__':input_image_path = 'test_print.jpg'  # ← 替换为你的图像路径process_image_for_printing(input_image_path)

(2)输入png,输出是tif或者PDF

import cv2
import numpy as np
from PIL import Imagedef enhance_image(img_bgr):"""执行图像增强操作"""# 放大图像(2x 分辨率)img_bgr = cv2.resize(img_bgr, (img_bgr.shape[1]*2, img_bgr.shape[0]*2), interpolation=cv2.INTER_CUBIC)# 饱和度增强(BGR → HSV)hsv = cv2.cvtColor(img_bgr, cv2.COLOR_BGR2HSV).astype(np.float32)h, s, v = cv2.split(hsv)s = np.clip(s * 1.3, 0, 255)hsv = cv2.merge([h, s, v])img_bgr = cv2.cvtColor(hsv.astype(np.uint8), cv2.COLOR_HSV2BGR)# 亮度增强(CLAHE + LAB)lab = cv2.cvtColor(img_bgr, cv2.COLOR_BGR2LAB)l, a, b = cv2.split(lab)clahe = cv2.createCLAHE(clipLimit=2.5, tileGridSize=(8, 8))l = clahe.apply(l)lab = cv2.merge([l, a, b])img_bgr = cv2.cvtColor(lab, cv2.COLOR_LAB2BGR)# 锐化(Unsharp Mask)blurred = cv2.GaussianBlur(img_bgr, (0, 0), sigmaX=1.2)sharpened = cv2.addWeighted(img_bgr, 1.5, blurred, -0.5, 0)return sharpeneddef save_as_tiff_cmyk(rgb_image, output_path):"""RGB 转为 CMYK 并保存为 TIFF"""pil_rgb = Image.fromarray(rgb_image)pil_cmyk = pil_rgb.convert('CMYK')pil_cmyk.save(output_path, format='TIFF', compression='tiff_lzw')print(f" 已保存为高质量 CMYK TIFF 文件: {output_path}")def save_as_pdf(rgb_image, output_path):"""保存为 RGB PDF(用于图文打印)"""pil_rgb = Image.fromarray(rgb_image)pil_rgb.save(output_path, format='PDF', resolution=300.0)print(f"已保存为高质量 PDF 文件: {output_path}")def process_png_for_print(input_png, output_tiff='output_print_ready.tif', output_pdf='output_print_ready.pdf'):"""主流程:从 PNG → 增强 → 输出 TIFF & PDF"""# 读取 PNG 图像(BGR 格式)img_bgr = cv2.imread(input_png, cv2.IMREAD_COLOR)if img_bgr is None:raise FileNotFoundError(f"无法读取图像:{input_png}")print(f"读取图像尺寸: {img_bgr.shape[1]}x{img_bgr.shape[0]}")# 图像增强enhanced_bgr = enhance_image(img_bgr)# BGR → RGBenhanced_rgb = cv2.cvtColor(enhanced_bgr, cv2.COLOR_BGR2RGB)# 保存为 TIFF (CMYK)save_as_tiff_cmyk(enhanced_rgb, output_tiff)# 保存为 PDF (RGB)save_as_pdf(enhanced_rgb, output_pdf)# 示例调用
if __name__ == '__main__':process_png_for_print("test_png.png",output_tiff="final_for_print.tif",output_pdf="final_for_print.pdf")
http://www.dtcms.com/a/195511.html

相关文章:

  • leetcode2749. 得到整数零需要执行的最少操作数-medium
  • 第二十六天打卡
  • python版本管理工具-pyenv轻松切换多个Python版本
  • 求职困境:开发、AI、运维、自动化
  • Java Set系列集合详解:HashSet、LinkedHashSet、TreeSet底层原理与使用场景
  • YOLO+UI(C#)开发
  • 基于MATLAB-GUI图形界面的数字图像处理
  • 服务培训QDA 的安装调试方法,硬件模块的讲解和软件控制台使用及系统测试
  • R1 快开门式压力容器操作证备考练习题及答案
  • java输入输出类
  • 如何排查阻塞语句
  • 【Linux】iptables 命令详解
  • dify知识库支持图文回复实践
  • STM32H743IIT6_ADC采集误差分析与ADC_DMA
  • Stainer Chain的镜像对称性的充分必要条件
  • 建筑设计单位的数据安全如何保护?天锐蓝盾针对性解决方案
  • 【AI模型部署】
  • Linux-进程概念(一)
  • Web-CSS入门
  • 优雅使用Gunicorn进程管理FastAPI
  • buuctf Crypto-摩丝1
  • 矫平机技术新维度:材料科学、数字孪生与零缺陷制造
  • QML 动画控制、顺序动画与并行动画
  • 【Linux网络】网络套接字编程
  • Python循环控制
  • 模板分享:网络最小费用流
  • 费曼技巧及提高计划
  • c++,linux,多线程编程详细介绍
  • 2025 Adobe Acrobat DC安装教程
  • 天能股份SAP系统整合实战:如何用8个月实现零业务中断的集团化管理升级