数学建模社区-数学中国
标题:
三行代码实现图像画质修复,图片清晰度修复,清晰度提升python
[打印本页]
作者:
2744557306
时间:
2024-3-21 09:28
标题:
三行代码实现图像画质修复,图片清晰度修复,清晰度提升python
核心代码
# 原始文件
. j$ ^$ s$ R3 k9 G4 O5 e" e
! T y3 ?& Q' u
enhancer = ImageEnhance.Sharpness(Image.open('文件路径.png'))
0 ]+ r( u) f' I. l+ y0 U# l7 `
- |- q3 X: W/ @8 o* j
# 增强图片
3 m$ b/ j, B# q# k, _# J
& b, s, j a" Z
img_enhanced = enhancer.enhance(增强系数float)
; e C9 `4 u7 e7 K5 ~) A) Q$ R: [
9 J& _/ t% T. C% V- Q, ?5 V
# 输出目标文件
% j& \9 ^' U+ _7 n& L0 u* \! y
& K% v: p" \! F" @- i( b+ F% o2 B
img_enhanced.save('文件名.png')
复制代码
注意,输入输出文件格式必须一致
. J6 M* F* L; M3 d9 x0 z
4 \* ]( u& Z9 N3 X
所需依赖
0 @2 C% a% V% g* [; D5 j
# 文件选择框,可以直接输相对路径不引入这个
from tkinter import filedialog
. s$ A( R0 _ E7 a5 q
" l+ Z* u( N2 V$ l
# 增强
* C$ V# V1 H _. h* n
; i" `9 |0 u& x! d
from PIL import Image, ImageEnhance
, \. ?* K/ ~' Z) z0 f$ ~: L
. I( U* z y K3 b; b2 X
代码实现
# ?. [4 v# N# ^9 p# a+ l! r
: Z: l" [, j1 d* a
from tkinter import filedialog
% J9 h! S, z" r$ m
, [/ P; T) d% W/ { j6 L
from PIL import Image, ImageEnhance
复制代码
def open_file_dialog():
) ~8 T/ @" J/ X* j- f1 H6 G
$ e2 S. p- @( K! m& N8 K
file_path = filedialog.askopenfilename()
$ G2 n: z& _! w4 e( U4 f' Y8 m9 A. w# W
# q5 s H/ J5 F6 ^
# 在这里添加代码,处理文件路径
8 Q8 K: i+ S$ N0 `# H
0 \# D0 \( y8 t! N
print("选择的文件路径:", file_path)
& |- K( S s$ w
`* x( k% j+ g- y0 @! s) N
return file_path
复制代码
- D: l, C' M3 Q u1 |
# 打开原图像
* j6 [- p. H! S5 M- G! ?1 A4 t
- ^- }$ ?5 B- h. @; P
# img = Image.open('image.png')
% q: ~$ |5 A" O& S
1 }: v. e9 ~4 _, _! C
filePath = open_file_dialog()
1 I& L8 W0 n+ l/ [
7 A T7 B A; {5 p' V: Y
img = Image.open(filePath)
7 [$ g, S- h5 {) |1 F2 z0 G
; t/ q, S, l5 v5 h
# 设置增强因子
4 B# s, T a% X: Y& M
2 u4 S8 _; [! R! ]- X" W
factor = float(input('请输入增强系数(1.0~99.9):'))
& |( m V) I- \7 q5 X/ ^
# s) j6 V4 h) o ]/ ^! y: |/ c
- T3 A7 q0 L+ {& N& A( }
7 {& u. `4 ]$ p# j+ W# t2 I
enhancer = ImageEnhance.Sharpness(img)
5 f7 H! _8 q4 \
! i8 K- l. t! Y1 E
- a F+ E) c4 B) M6 t
4 W; a) V8 ?& S" ]$ R; R6 {: R
# 增强图片
6 i5 S6 P6 N- p4 x
( l/ w/ h4 W; v2 c2 {; T! u2 T- c
img_enhanced = enhancer.enhance(factor)
4 X7 M1 }" U+ [3 D3 N0 o" K
" z! t4 ~3 J3 q& o9 U
' `0 Z2 w, Q2 z# {; C
' B* T/ \ g1 ^2 E
# 保存增强后的图像
; n7 x9 |0 A3 T- ?1 ~$ V
8 m$ m# X/ U/ g6 F' H
arr = filePath.split('/')
0 i x ^! } P
, V6 a* d5 O% F
i=0
- B& G& c$ B. Q) k
% Z% Z! |. F7 i" j& Y
fileDir=''
9 U! J' g% _$ L) j: B; A' o
$ M. }: f. x6 G+ J
len = len(arr)
/ k1 z9 c# W" \5 J5 u+ O9 ]. S
. |0 E. [- E2 G/ e6 U Y
while i < len-1:
+ }4 v- S( |8 ]9 L: M( z
: X% f E0 u% Y2 k
fileDir += arr[i]+'/'
' t) x/ I: y/ C3 P5 _$ A: G* y! G
3 s' A/ H2 g2 m) a2 M% K
i += 1
4 g1 ^: g/ q0 x6 t( h3 A$ h
$ r, U) R: `+ l8 ?& w
8 D( @" E% [7 p' C9 g. b) j
! e4 G0 T3 k5 z1 y% V$ Y6 ]
img_enhanced.save(fileDir+'output'+factor.__str__()+arr[len-1])
0 L( `7 R1 l n+ y/ w
. z7 c$ {# p4 B9 `7 l2 P% D+ y
print('输出文件为:'+fileDir+'output'+factor.__str__()+arr[len-1])
复制代码
应用层面的话复制上面代码直接执行即可,唠叨两句讲讲我的实现思路:open_file_dialog()函数使用 tkinter 实现文件获取拿到文件名,用于识别需要修复的image;然后使用 PIL 的增强功能生成好画质修复后的图片;路径拼接确定输出路径和文件名为原路径下的output+原文件名,下面附上PIL的另外两个基础功能,如果有提升锐度和对比度的需求也可以自行改写相关代码:
9 i1 e* ~: d! c% }+ n: T
5 ~0 Z; |+ k6 R& I" t' M
增强锐度
from PIL import Image, ImageEnhance
* X% x: u5 A: R5 h: o& S7 N q- }
2 G9 e( u5 z! a& d3 {% k
: |( p& v) G* n
u2 C4 h# _% F- v! a) ?
# 打开图片
7 l+ O5 M( V8 x) }# s3 a* P& c
0 G" [: O! \7 O0 R
img = Image.open('image.png')
* P4 |% b$ |+ J( U R6 Z# R# J
: W$ B$ ^* U; o3 p7 ~
/ C4 l( g. U. V& @$ z0 B
* `$ I* w% W- r; c4 h
# 增强锐度
* t1 I7 v8 o- e ]9 F
& ]+ F* S7 ^8 V7 Q3 @
sharpness = ImageEnhance.Sharpness(img)
' y! e; `5 a f0 Y! E2 k2 A4 j! Y, h
- B/ C5 G; o! R! s
img = sharpness.enhance(1.5)
, b& G7 F' f4 W0 Y' k( o
5 ]. }1 S9 k8 ]5 D! R
' U) l1 }" }! k
2 E# ]: j# R/ r p) y1 i
# 显示图片
1 `5 h: F- Z; R
: z. r+ r4 q S! U
img.show()
复制代码
增强对比度
from PIL import Image, ImageEnhance
t i/ X4 Q4 m' f$ _4 T
7 `+ R0 c+ P ?2 c# A, `) u% @ ^" i
x [3 P! a: s5 I
, a' L1 ?+ l( l. ^! O9 A
# 打开图片
9 K1 ^; U# {1 N
1 D! m9 r& _! H+ ^; r
img = Image.open('image.png')
3 }% s6 G9 ^% m+ ^
2 c8 ~9 r+ g: D+ q
' p Z0 W+ F% Z3 A q( T$ h
: c6 b8 X% O# B1 ]( c& R& E) P: t
# 增强对比度
" z& l# ` _: T' Y/ y( u; M0 ~
: Y- ^1 V! m/ U" U# z8 T* h1 Z
contrast = ImageEnhance.Contrast(img)
\# x! o/ Y& T9 z, y9 l8 m
5 O) h4 ]7 D# g5 Z1 a. J7 P A
img = contrast.enhance(1.5)
# D; Y# q+ k5 k0 g) u+ C% O) k
3 B A( Z; t& [7 a
' U+ V0 _2 j$ g4 N
! |$ S" q$ E6 I
# 显示图片
6 d. v% F" _/ A, j
# p. i: }9 g7 {7 U
img.show()
复制代码
, `- a N: U6 c" k# g3 ]7 J
欢迎光临 数学建模社区-数学中国 (http://www.madio.net/)
Powered by Discuz! X2.5