使用python提升图片清晰度的常见方法!

使用python提升图片清晰度的常见方法!

在Python中,提升图片清晰度可以通过多种方法实现,其中一些常见的方法包括使用图像处理库如OpenCV和Pillow,下面小编就来和大家介绍一下具体实现方法吧。

在Python中,提升图片清晰度可以通过多种方法实现,其中一些常见的方法包括使用图像处理库如OpenCV和Pillow,以及深度学习库如TensorFlow或PyTorch来实现更高级的图像增强。下面是一些常见的方法:

方法1:使用Pillow库

Pillow是一个非常流行的Python图像处理库,可以用来调整图片的对比度、锐化等,从而在一定程度上提升图片的清晰度。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
from PIL import Image, ImageEnhance, ImageFilter
# 打开图片
image = Image.open("path_to_your_image.jpg")
# 增加对比度
enhancer = ImageEnhance.Contrast(image)
image_enhanced = enhancer.enhance(2# 2是对比度因子,可以调整
# 锐化图片
image_sharp = image_enhanced.filter(ImageFilter.SHARPEN)
# 保存处理后的图片
image_sharp.save("path_to_save_enhanced_image.jpg")

方法2:使用OpenCV库

OpenCV是一个开源的计算机视觉和机器学习软件库,它也提供了图像锐化等操作。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
import cv2
import numpy as np
# 读取图片
image = cv2.imread("path_to_your_image.jpg")
# 转换为灰度图(可选,锐化通常在灰度图上操作)
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
# 应用锐化核进行锐化处理
kernel_sharpening = np.array([[-1,-1,-1],
[-1, 9,-1],
[-1,-1,-1]])
sharpened = cv2.filter2D(gray, -1, kernel_sharpening)
# 将灰度图转换回彩色图(如果需要)
sharpened_color = cv2.cvtColor(sharpened, cv2.COLOR_GRAY2BGR)
# 保存处理后的图片
cv2.imwrite("path_to_save_enhanced_image.jpg", sharpened_color)

方法3:使用深度学习方法(例如使用TensorFlow或PyTorch)

对于更高级的图像增强,可以使用深度学习模型,如使用预训练的模型进行风格迁移或超分辨率(Super-Resolution)。这通常需要更多的计算资源和数据。

使用TensorFlow的Keras进行图像超分辨率:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
import tensorflow as tf
from tensorflow.keras.applications.vgg16 import VGG16, preprocess_input
from tensorflow.keras.models import Model
from tensorflow.keras.layers import Input, Conv2D, UpSampling2D, concatenate
import numpy as np
import cv2
# 加载预训练的VGG16模型(用于特征提取)
base_model = VGG16(weights='imagenet', include_top=False, input_shape=(None, None, 3))
base_output = base_model.output
base_model.trainable = False  # 冻结VGG16层以节省内存和加快处理速度
# 定义超分辨率模型结构(这里仅为示例,实际模型可能需要更复杂的结构)
input_img = Input(shape=(None, None, 3))
x = Conv2D(64, (3, 3), activation='relu', padding='same')(input_img)
x = UpSampling2D()(x)  # 上采样以增加图像尺寸,通常需要多次上采样和卷积层组合使用以获得更好的效果。
x = Conv2D(64, (3, 3), activation='relu', padding='same')(x)
x = UpSampling2D()(x)  # 再次上采样以进一步增加图像尺寸和清晰度。
output_img = Conv2D(3, (3, 3), activation='sigmoid', padding='same')(x)  # 输出层,注意激活函数根据需求选择。
model = Model(input_img, output_img)  # 创建模型实例。
model.compile(optimizer='adam', loss='mse'# 编译模型,选择适当的损失函数。
# 加载并预处理图像(仅为示例,实际使用时需要根据数据集进行调整)
image = cv2.imread("path_to_your_image.jpg")
image = cv2.resize(image, (256, 256))

知识扩展

下面小编为大家整理了Python提高图片的分辨率的方法,感兴趣的小伙伴可以了解下

方法 1:使用插值方法(如双线性插值、双三次插值)

插值是一种简单的图像放大方法,适合快速实现,但可能会损失一些细节。

1
2
3
4
5
6
7
8
9
10
11
12
13
from PIL import Image
# 打开图像
image = Image.open("input_image.jpg")
# 设置目标分辨率(宽度, 高度)
target_size = (1920, 1080# 例如,将图像放大到1920x1080
# 使用双三次插值放大图像
resized_image = image.resize(target_size, Image.BICUBIC)
# 保存结果
resized_image.save("output_image_high_res.jpg")

插值方法说明:

  • Image.NEAREST:最近邻插值(速度最快,质量最低)。
  • Image.BILINEAR:双线性插值(质量中等)。
  • Image.BICUBIC:双三次插值(质量较高,推荐使用)。
  • Image.LANCZOS:Lanczos插值(质量最高,但计算较慢)。

方法 2:使用深度学习模型(如ESRGAN、SRCNN)

深度学习模型可以生成更高质量的图像,适合需要高保真度的场景。

使用 OpenCV 和 TensorFlow 实现超分辨率:

安装依赖:

1
pip install opencv-python tensorflow

使用预训练的深度学习模型:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
import cv2
import tensorflow as tf
import numpy as np
# 加载预训练的超分辨率模型
model = tf.keras.models.load_model("pretrained_esrgan_model.h5"# 替换为你的模型路径
# 读取图像
image = cv2.imread("input_image.jpg")
image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)  # 转换为RGB格式
image = image / 255.0  # 归一化
# 调整图像大小为模型输入尺寸
input_image = np.expand_dims(image, axis=0# 添加批次维度
# 使用模型预测高分辨率图像
high_res_image = model.predict(input_image)
# 后处理
high_res_image = np.squeeze(high_res_image, axis=0# 去掉批次维度
high_res_image = (high_res_image * 255).astype(np.uint8)  # 反归一化
# 保存结果
cv2.imwrite("output_image_high_res.jpg", cv2.cvtColor(high_res_image, cv2.COLOR_RGB2BGR))

模型说明:

  • ESRGAN:Enhanced Super-Resolution Generative Adversarial Networks,生成高质量的超分辨率图像。
  • SRCNN:Super-Resolution Convolutional Neural Network,经典的超分辨率模型。
  • 你可以从开源社区(如 TensorFlow Hub 或 GitHub)下载预训练模型。

方法 3:使用现成的超分辨率工具包

一些现成的工具包(如 OpenCV 的 dnn_superres 模块)可以方便地实现超分辨率。

安装依赖:

1
pip install opencv-python opencv-contrib-python

使用 dnn_superres:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
import cv2
# 创建超分辨率对象
sr = cv2.dnn_superres.DnnSuperResImpl_create()
# 加载预训练模型
model_path = "EDSR_x4.pb"  # 替换为你的模型路径
sr.readModel(model_path)
sr.setModel("edsr", 4# 设置模型类型和放大倍数
# 读取图像
image = cv2.imread("input_image.jpg")
# 进行超分辨率
high_res_image = sr.upsample(image)
# 保存结果
cv2.imwrite("output_image_high_res.jpg", high_res_image)

模型说明:

可以从 OpenCV 官方资源 下载预训练模型(如 EDSR、ESPCN、FSRCNN 等)。

总结

插值方法:简单快速,适合一般需求,但细节可能不足。

深度学习模型:生成高质量图像,适合高保真度需求,但需要更多计算资源。

现成工具包:如 OpenCV 的 dnn_superres,方便易用,适合快速实现。

根据你的需求选择合适的方法!如果需要高质量结果,推荐使用深度学习模型。

如果你想直接修改图片的分辨率(即调整图像的宽度和高度),可以使用 OpenCV 的 resize 函数。这种方法会通过插值来放大或缩小图像,但不会增加图像的细节(即不会真正提高图像的质量)。以下是代码示例:

代码:使用 OpenCV 修改图片分辨率

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
import cv2
# 读取图像
image = cv2.imread("input_image.jpg")
# 设置目标分辨率(宽度, 高度)
target_width = 1920  # 目标宽度
target_height = 1080  # 目标高度
target_size = (target_width, target_height)
# 使用 OpenCV 的 resize 函数调整分辨率
resized_image = cv2.resize(image, target_size, interpolation=cv2.INTER_CUBIC)
# 保存结果
cv2.imwrite("output_image_resized.jpg", resized_image)
# 显示结果(可选)
cv2.imshow("Resized Image", resized_image)
cv2.waitKey(0)
cv2.destroyAllWindows()

参数说明

1.target_size:

  • 目标分辨率,格式为 (宽度, 高度)。
  • 例如 (1920, 1080) 表示将图像调整为 1920x1080 的分辨率。

2.interpolation:

插值方法,用于决定如何计算新像素的值。常用的插值方法包括:

  • cv2.INTER_NEAREST:最近邻插值(速度最快,质量最低)。
  • cv2.INTER_LINEAR:双线性插值(默认值,速度较快,质量较好)。
  • cv2.INTER_CUBIC:双三次插值(速度较慢,质量更高)。
  • cv2.INTER_LANCZOS4:Lanczos 插值(速度最慢,质量最好)。

注意事项

放大图像:

  • 如果目标分辨率比原始图像大,OpenCV 会通过插值填充新像素,但不会增加图像的细节。
  • 放大后的图像可能会显得模糊。

缩小图像:

如果目标分辨率比原始图像小,OpenCV 会丢弃部分像素,图像会变得更小,但可能会丢失一些细节。

保持宽高比:

如果你希望调整分辨率时保持图像的宽高比,可以先计算缩放比例,然后调整分辨率。例如:

1
2
3
4
5
original_height, original_width = image.shape[:2]
scale_percent = 50  # 缩小到原来的50%
target_width = int(original_width * scale_percent / 100)
target_height = int(original_height * scale_percent / 100)
target_size = (target_width, target_height)

总结

使用 cv2.resize 可以直接修改图像的分辨率,但不会增加图像的细节。

如果需要高质量的超分辨率效果,建议使用深度学习模型(如 ESRGAN、SRCNN 等)。

到此这篇关于使用python提升图片清晰度的常见方法的文章就介绍到这了。

 

 

学习资料见知识星球。

以上就是今天要分享的技巧,你学会了吗?若有什么问题,欢迎在下方留言。

快来试试吧,小琥 my21ke007。获取 1000个免费 Excel模板福利​​​​!

更多技巧, www.excelbook.cn

欢迎 加入 零售创新 知识星球,知识星球主要以数据分析、报告分享、数据工具讨论为主;

Excelbook.cn Excel技巧 SQL技巧 Python 学习!

你将获得:

1、价值上万元的专业的PPT报告模板。

2、专业案例分析和解读笔记。

3、实用的Excel、Word、PPT技巧。

4、VIP讨论群,共享资源。

5、优惠的会员商品。

6、一次付费只需129元,即可下载本站文章涉及的文件和软件。

文章版权声明 1、本网站名称:Excelbook
2、本站永久网址:http://www.excelbook.cn
3、本网站的文章部分内容可能来源于网络,仅供大家学习与参考,如有侵权,请联系站长王小琥进行删除处理。
4、本站一切资源不代表本站立场,并不代表本站赞同其观点和对其真实性负责。
5、本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报。
6、本站资源大多存储在云盘,如发现链接失效,请联系我们我们会第一时间更新。

THE END
分享
二维码
< <上一篇
下一篇>>