当前位置: 首页 > 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.xdnf.cn/news/487963.html

相关文章:

  • docker compose 启动指定的 service
  • MongoTemplate 基础使用帮助手册
  • 12条热门照片提示
  • XS9922C芯片:多能一体的视频处理强者,可p2p替代TP9930和TP9932,开启智能视觉新征程
  • Flask框架深度解析:蓝图、上下文机制与Jinja2模板引擎实战
  • ssh 配置了.ssh/authorized_keys 依旧需要密码的问题
  • 如何同时管理不同平台的多个账号?
  • 【第七节】ESP32-S3 霍尔传感器应用实战:磁场检测与蜂鸣器控制
  • 小学数学题批量生成及检查工具
  • PT2062单触控单输出LED调光IC
  • python报错:应为类型Union[str,int],但实际为None问题原因及解决方案
  • HGDB索引膨胀的检查与处理思路
  • 哈希表实现(1):
  • 【言语】刷题5(填空)
  • 2025-05-15 代码人生 - 精选文章周刊
  • Microsoft Azure 服务4月更新告示
  • 简化WPF开发:CommunityToolkit属性绑定与命令声明实战
  • 服务器死机了需要检查哪些问题
  • pojo层、dao层、service层、controller层的作用
  • C++(15):默认值(default)
  • 等离子模块【杀菌消毒】
  • 大群将至:通付盾推出多智能体协同平台Legion
  • mysql隔离级别的学习分享
  • python可视化:北方省市人口流动与春运数据综合分析5
  • Java项目使用Tomcat启动后JS文件中的中文乱码问题
  • CRM客户管理系统有什么缺点?
  • 矩阵转置的LATEX写法
  • 阿里视频创建和编辑的一体化模型论文速读:Wan2.1-VACE-14B
  • 【24真题】华中师范大学838
  • 开发工具指南