数学建模社区-数学中国
标题:
三行代码实现图像画质修复,图片清晰度修复,清晰度提升python
[打印本页]
作者:
2744557306
时间:
2024-3-21 09:28
标题:
三行代码实现图像画质修复,图片清晰度修复,清晰度提升python
核心代码
# 原始文件
3 R0 [: r/ l2 { {- ]' W
! m6 B! `% Q' p
enhancer = ImageEnhance.Sharpness(Image.open('文件路径.png'))
7 q& C) w6 n2 h/ L0 `' W' g
Q; m& V# F1 l- f- C
# 增强图片
# Z* I* ~. M5 [
+ x+ p2 d, Q5 u6 y2 D1 ~
img_enhanced = enhancer.enhance(增强系数float)
" r0 P4 {# D! @! C
2 T" }! l: M R* B: j2 k3 Q1 a% _
# 输出目标文件
' @, T) ?& v3 H8 |3 E' T" q
% J2 }% p8 N& \1 w
img_enhanced.save('文件名.png')
复制代码
注意,输入输出文件格式必须一致
( K# b$ \; ~% y- Z/ c6 k4 z# a
( t( P" g) m2 u/ g) p
所需依赖
, P @4 m. L5 `" m: j
# 文件选择框,可以直接输相对路径不引入这个
from tkinter import filedialog
- ~% b+ l2 w/ N1 p
) j7 Y% ]: P( j k
# 增强
$ f) I; \) L" a
' W4 p# b9 ~0 G" ~1 Z1 P
from PIL import Image, ImageEnhance
+ e H& A" s; T
* v/ E' n9 Y, v
代码实现
+ j6 x# ]3 E; o: p3 w9 u
, Y* Q# j, B' G' W$ \ G; T
from tkinter import filedialog
2 `1 g' Y. {7 Y- o0 o+ X6 \. d
' e3 H# v! u7 F$ U; g
from PIL import Image, ImageEnhance
复制代码
def open_file_dialog():
+ L6 v1 `# I4 q8 J2 O
8 @4 a$ G- a. U A
file_path = filedialog.askopenfilename()
% c! Q- K- N& g% D% Y# h, m
6 e' u$ w+ h) F6 k
# 在这里添加代码,处理文件路径
/ ^4 r# w& I6 Z* S7 ?1 n2 y H% {
6 o7 m2 A; A! _6 y& r V" v2 G
print("选择的文件路径:", file_path)
% A- a7 `& v+ C
D" j; t, x7 Y) L
return file_path
复制代码
4 F$ H; z' O6 x" L! W/ }
# 打开原图像
- k$ I8 y* P9 O3 Q2 U' H
' X# D& P" G. x) E1 o4 ]* `
# img = Image.open('image.png')
" d2 H) p! G$ @# ^ A3 x; A- @; x
8 ] N K0 A' [8 i1 W
filePath = open_file_dialog()
4 a& ^) X4 I v' _* G" @
- o3 g5 P# I: Y
img = Image.open(filePath)
3 b# |3 J) M+ \
$ ]9 N& A \9 r2 H7 f" T, X Q
# 设置增强因子
; F& g7 I5 G; Z( i
# O+ H1 C# [2 j
factor = float(input('请输入增强系数(1.0~99.9):'))
, G6 H$ O/ P2 I% @0 v8 ]) c
- |/ v/ Y _) |2 f5 i
- I% h! K+ T# |; Z
8 `# e1 X! c r, g! y6 n
enhancer = ImageEnhance.Sharpness(img)
6 r5 _1 w m& _6 ?( f% d$ D9 r$ j$ G
8 y% x; B: u7 z2 e' Z
7 B. B. X3 u. F% F/ o3 ?3 e
{; U+ M* A+ L3 b s$ s
# 增强图片
0 V4 @6 @ X3 f; ]
" _) [' y* T8 I3 L, }5 P$ d2 d
img_enhanced = enhancer.enhance(factor)
" g) L: ?- q5 I; N1 N
2 S/ g/ a& U1 o
# o, z( R7 g2 e) Q) m+ f8 _
9 ]. b y% {1 X+ f
# 保存增强后的图像
4 H2 G$ m6 K2 c, ]( O+ u
8 f& s3 B& g9 q" Y5 [, U
arr = filePath.split('/')
A' @& D1 p2 G _4 C6 |! A9 D
/ Z1 o% \4 E; A- j7 |' n
i=0
' D( I4 A/ ]; W4 N
) C& E- D9 f* d
fileDir=''
2 V1 k! b) @0 a8 o9 F. [
8 U. _; l# e7 Q5 |4 L
len = len(arr)
8 R0 u Y$ W2 \3 @
. }# r7 k- R- D9 x, f }) R
while i < len-1:
" s, Q5 w. J$ Q* j2 B: B' Y
/ {, S; y6 D0 N/ |! T) F7 _
fileDir += arr[i]+'/'
' y" q5 o! o9 y+ v% d3 L D
2 S5 {5 L' a& g7 [0 m7 Z5 S" x2 I
i += 1
0 A6 S8 r3 f7 ]' d" [* D
$ O7 Z: w! W) S
7 O; W6 \' Z, A
, u) h6 E8 b3 s: i5 b7 c
img_enhanced.save(fileDir+'output'+factor.__str__()+arr[len-1])
5 i1 ^) @% M( A4 p
9 G& [1 S1 Y5 k
print('输出文件为:'+fileDir+'output'+factor.__str__()+arr[len-1])
复制代码
应用层面的话复制上面代码直接执行即可,唠叨两句讲讲我的实现思路:open_file_dialog()函数使用 tkinter 实现文件获取拿到文件名,用于识别需要修复的image;然后使用 PIL 的增强功能生成好画质修复后的图片;路径拼接确定输出路径和文件名为原路径下的output+原文件名,下面附上PIL的另外两个基础功能,如果有提升锐度和对比度的需求也可以自行改写相关代码:
+ K8 y5 ]" m! l4 e) x' |
0 l9 N+ P& r3 Y% A, C
增强锐度
from PIL import Image, ImageEnhance
3 G! A7 B! i& f) x/ U8 _
3 M; x F! Z, ^0 j' \' z3 {
- k U1 n% R% ~6 \
1 T4 Q) e+ x# r# M; b3 s
# 打开图片
; f: B. ~3 I1 L( I- T
j$ m& N( J7 P2 I; Y
img = Image.open('image.png')
/ P6 P, N6 G: h. t3 j7 l& X8 W* J6 O
f! S H+ D& n2 D
) g6 F2 q8 y4 u! J+ y2 \6 `: i/ `
/ Y W0 z1 G; K5 H
# 增强锐度
* l$ g* L! r) H" B0 \
; \5 p! K& @% f% x- V5 U- J
sharpness = ImageEnhance.Sharpness(img)
3 t* G, a7 A! U2 q; T+ }
# [8 A8 w a% V9 _8 u* x/ O7 c6 z9 a
img = sharpness.enhance(1.5)
. _; @6 ?7 p, ]; h2 z
( K4 i3 w4 z5 I+ f+ E" A$ b1 l2 w
' { z! T& C8 W5 A. U$ R; b
9 P$ B2 u9 B2 ~1 a8 g
# 显示图片
6 t, J K) p+ x& y$ T: r: i* {
$ U5 J! R5 ?& |
img.show()
复制代码
增强对比度
from PIL import Image, ImageEnhance
: @/ e8 }0 ~, t" R
! ?8 b/ `8 h+ \/ ~! D5 h( s8 K3 ?2 f
! ~; V% ^, R7 c) ~# a
, q1 P$ d+ F! z; o$ a8 g3 @: @# Z
# 打开图片
1 b5 X, U, l, }$ H/ h c
. Y2 t" V: `9 A1 V
img = Image.open('image.png')
- G* {, e" F; s0 {6 a
" c; {+ c. j5 K3 L+ O8 E
/ @' W8 [. n. G; o
( E4 a' y( {7 h% Y3 o5 k% x: i
# 增强对比度
. Y1 J7 Z# x2 V6 z; N3 F
3 a( P/ H) P1 X5 c: o! I
contrast = ImageEnhance.Contrast(img)
4 q3 H) o( ?0 `$ X7 h$ @
2 k" u! _* y9 W! W+ s" G! [4 N4 k
img = contrast.enhance(1.5)
5 _+ a6 s3 @6 P q1 ~1 \4 j% w
$ W2 m6 j y! X( |
1 B6 J. d: A/ @! `
) I. o. l* |- L7 F! z4 w
# 显示图片
& E+ L% u8 L' L ]4 [9 g% c
. Y2 A" b5 R/ P# [9 F b1 I
img.show()
复制代码
0 T! n8 D& {. L: L
欢迎光临 数学建模社区-数学中国 (http://www.madio.net/)
Powered by Discuz! X2.5