数学建模社区-数学中国
标题:
三行代码实现图像画质修复,图片清晰度修复,清晰度提升python
[打印本页]
作者:
2744557306
时间:
2024-3-21 09:28
标题:
三行代码实现图像画质修复,图片清晰度修复,清晰度提升python
核心代码
# 原始文件
: @8 m! ^6 v8 F: l& F8 A
0 X* v* O9 T. l5 t* G
enhancer = ImageEnhance.Sharpness(Image.open('文件路径.png'))
6 b, w# t9 h1 ?2 r
7 h4 g z) y7 j& R
# 增强图片
K1 {1 ]: ?! f3 P" ^) [
; r y- V+ _0 x5 r l: w
img_enhanced = enhancer.enhance(增强系数float)
6 [. O; H1 [: g1 _( n# u+ R, T6 R
( l4 ~6 v( t* S; r
# 输出目标文件
: q a$ W: c/ E! d
+ a p( C5 u/ B2 J0 d9 l" v
img_enhanced.save('文件名.png')
复制代码
注意,输入输出文件格式必须一致
N: e% v& c. Y0 u" d
2 c' j0 m9 C6 b: [+ L
所需依赖
% v+ h8 @; x$ `, k3 y! g# w
# 文件选择框,可以直接输相对路径不引入这个
from tkinter import filedialog
6 u. E6 W, H7 `0 i! T
+ h4 G# W( O! c- A" V" O# B
# 增强
) a) w" C& N- U1 D7 m. j) h* v
/ W* k% e9 J% {: [- [( M
from PIL import Image, ImageEnhance
j# F5 x3 ?. y$ _
" V) i, D3 v" ]
代码实现
8 J5 O0 `( F9 L- g- {# m
- L: y% h' o! E) v: T7 T
from tkinter import filedialog
0 {# u5 q! y" ~; y. ?( _; h/ P+ B
2 A. J. u: n$ g m7 u
from PIL import Image, ImageEnhance
复制代码
def open_file_dialog():
2 d( r9 `8 i8 H7 _
8 O1 k% E) G2 z: h3 q
file_path = filedialog.askopenfilename()
$ S0 L8 R i- R. w2 i" Y
- Q, o) B' B, k1 I; g
# 在这里添加代码,处理文件路径
! P; f5 v5 Q9 k6 J h
' {3 B, `: w) r6 b2 w5 j
print("选择的文件路径:", file_path)
4 {: H+ { b4 u7 e+ N8 w7 [; Y
; R; g$ z% U: l( T, w, K
return file_path
复制代码
; Y! z; J4 N) O2 S$ i6 c
# 打开原图像
- V4 w% @$ \- F( Y
6 d& f" `0 [. K0 R* d9 f' I! D5 v
# img = Image.open('image.png')
% ^0 K2 w6 L2 V4 C, N/ l: |
/ i8 g6 k" T. S# Q( J+ F+ A
filePath = open_file_dialog()
! e: l4 t5 S+ w" ]& n3 G+ A
( ]0 Q* L N) T% p: @9 L
img = Image.open(filePath)
5 v0 y0 J% d: I4 i
1 L; n8 t7 }/ W3 L
# 设置增强因子
7 x) j9 X5 k {
+ D9 W. ~ F: a+ Q
factor = float(input('请输入增强系数(1.0~99.9):'))
6 C2 k4 n* m' [6 E; j8 n7 j
' q- \" V6 I% B: P" n3 D3 }
2 V9 t0 Y. Q8 \+ l) f! I9 N
' }6 b. O" P$ N: y! r, M2 f
enhancer = ImageEnhance.Sharpness(img)
6 Y' P; ]. B# V; b9 E7 W
& N0 f) T2 X" a0 T5 \
* g6 o* k& A$ w8 V
/ v! K# \+ k% g0 e6 \* Q3 Q6 y
# 增强图片
4 ^- \5 }1 `, ^. P f4 {8 c
% J5 {6 S p0 q
img_enhanced = enhancer.enhance(factor)
& D5 i) l" K3 u( o+ Q
F: ]6 B: Y8 U: _" ?9 G
9 U5 g$ |& k. y/ ?7 S8 C0 J
. s, T- u' x$ S; C% q
# 保存增强后的图像
0 ], D2 Q, M% ?& f
+ M- Q. _" T0 F
arr = filePath.split('/')
& Y( r/ x) G% a2 L5 {. w
% X4 f4 b' \+ q8 I! N
i=0
( I0 D& B3 A/ l; U
1 y( h0 \1 n3 n$ i0 ?% U
fileDir=''
8 T/ F6 z# Q( i% M* _
' l N4 c2 [7 ^, e" \8 |& _
len = len(arr)
3 H' l* U& H" C+ C: c* {* H. T
9 E: _6 ?8 h( g" o) J% B
while i < len-1:
6 E2 b& ?# i. K8 `
+ ^" O' A8 O8 [4 c& F6 m5 Y2 }
fileDir += arr[i]+'/'
8 t- b- B" f/ H* R$ c+ |2 R
; r& K1 P& r* G+ r& o" w& }( W
i += 1
: X& @0 n& e# G7 G$ |0 e6 x
% X8 u, k0 e# ? D; M0 N# d/ l
! x* U5 |! {# `0 @6 C, E7 i
# E3 T5 Y" z1 n$ z2 _
img_enhanced.save(fileDir+'output'+factor.__str__()+arr[len-1])
) ?! ?2 Y' ]' P; x9 [& v
3 s |: z3 h0 y0 z8 p7 T
print('输出文件为:'+fileDir+'output'+factor.__str__()+arr[len-1])
复制代码
应用层面的话复制上面代码直接执行即可,唠叨两句讲讲我的实现思路:open_file_dialog()函数使用 tkinter 实现文件获取拿到文件名,用于识别需要修复的image;然后使用 PIL 的增强功能生成好画质修复后的图片;路径拼接确定输出路径和文件名为原路径下的output+原文件名,下面附上PIL的另外两个基础功能,如果有提升锐度和对比度的需求也可以自行改写相关代码:
' `4 d" K5 H6 X5 q; c: a* S8 [
4 V* B3 u) Q. Y7 E6 p# Y
增强锐度
from PIL import Image, ImageEnhance
}1 K/ N6 k( T, @8 ?8 |) h
/ b# j% a0 l- {) ?8 P
. V1 F: Z, K- P/ J! l
# Y* X" O V2 w- d' e% {( C9 U ]0 k
# 打开图片
& X2 C$ V& o( t) p2 ~
) G& m: K$ E, ~ T. b. d
img = Image.open('image.png')
` ^, P) q4 X8 T' b& F! V
7 Y$ e& |% }; Y" L# C1 d
# S7 p! J6 G0 w3 V) l; h
0 d3 g! P- {( v) i0 y' y
# 增强锐度
9 R3 ]7 i3 B0 w0 ?4 ?
1 f, n1 J9 h! W9 N2 w o
sharpness = ImageEnhance.Sharpness(img)
" \, \/ U, i! y2 L+ [: f" z8 Z5 \
4 A0 ?. o2 E# J% f% C+ q8 _$ K
img = sharpness.enhance(1.5)
0 H) A9 I) q" Z5 Y# ^4 E, Z
2 e! q- D- P, H( U
7 ^, U' b; r; C# F& D
% e' K% m3 D8 J8 g1 [/ X- Y# e _# ^( ]
# 显示图片
3 F& A3 D7 u+ m
( b. I6 \1 X: [* P4 w% n f& Y
img.show()
复制代码
增强对比度
from PIL import Image, ImageEnhance
4 X I& U+ p4 \ Y) f3 j# E' ^
" [. ?+ l. b9 \7 m9 J" G
7 p, D# C& i& j. s0 A
+ O( }0 ?7 C, Z* Y
# 打开图片
4 u) P7 k; D ?1 h/ J
& N& E8 }& |5 J v6 ^ d, a
img = Image.open('image.png')
/ h; ], b1 i) o, D3 d5 Z% L9 o
# f; {3 B3 a. y% r- [3 @
+ F/ H3 p4 {: d2 `9 j. r( h( t( J
9 N6 B0 l, k- }- T
# 增强对比度
% A4 h% K3 S3 v/ \6 U- m) U
. {6 }. X- E. H- b7 v8 Q
contrast = ImageEnhance.Contrast(img)
0 x; q' {8 G: S2 I; I- {+ N
' P1 i) ~' o$ ^
img = contrast.enhance(1.5)
& d7 e$ w/ c5 s: t' W
2 Z; C ] i) r M+ c/ q
/ _; e W3 \7 s3 O6 X
# m/ a' k$ d+ t# U4 X. L
# 显示图片
+ e0 z% ]1 L2 o
6 q; N7 ?8 z, C! X& g8 F
img.show()
复制代码
1 A0 V3 I- s( U0 B' L
欢迎光临 数学建模社区-数学中国 (http://www.madio.net/)
Powered by Discuz! X2.5