数学建模社区-数学中国
标题:
三行代码实现图像画质修复,图片清晰度修复,清晰度提升python
[打印本页]
作者:
2744557306
时间:
2024-3-21 09:28
标题:
三行代码实现图像画质修复,图片清晰度修复,清晰度提升python
核心代码
# 原始文件
$ \/ _* {0 u" Z$ m
! C: O/ \% e* U) s8 J
enhancer = ImageEnhance.Sharpness(Image.open('文件路径.png'))
, _# P3 I2 \0 Y' Y4 |# n- t* I
/ `% k- v1 P$ V, }$ X- o
# 增强图片
5 t2 R9 G: l, `6 U- N
8 ]) j1 U% C$ r
img_enhanced = enhancer.enhance(增强系数float)
" `3 ^4 c4 o: W9 j
^4 d# t1 F& z/ x/ S! M. k
# 输出目标文件
6 c: A* G% d$ g8 }: b
) k# ?3 M8 w% R. A5 y) Z( C
img_enhanced.save('文件名.png')
复制代码
注意,输入输出文件格式必须一致
. O, t( U6 g; }" R
4 }# B: e; }/ _; F9 }2 l+ [
所需依赖
3 O U2 N# n8 t4 B9 \
# 文件选择框,可以直接输相对路径不引入这个
from tkinter import filedialog
& q4 P: r5 j7 w( B
6 e& Y5 L" @8 ]* j
# 增强
% Z. {& U$ V( Y
& V" g& |4 |( b; b
from PIL import Image, ImageEnhance
a3 [3 z& ^8 b6 W% [4 x0 o% e& Z, M- ?* h
7 u5 S$ o6 y& }1 c' C
代码实现
: y7 a" k" x& V9 W, i: c
$ f! W' n" s3 @4 {4 B
from tkinter import filedialog
7 @+ s- \+ U( G: ]; u' M, j/ b& M$ ^
, {/ c5 u$ B' \4 y/ j6 s8 m0 n
from PIL import Image, ImageEnhance
复制代码
def open_file_dialog():
$ G, W0 m. z! w( R z6 _
9 l2 M, P# X; W* K: q) [# y8 V" O f3 d
file_path = filedialog.askopenfilename()
+ e& r5 f1 c/ z b$ v2 t
) h, Z& ?4 D- F" @; K0 ~' ]
# 在这里添加代码,处理文件路径
! c" [ Q2 F& J7 r* _) n3 M: z
0 ]2 B$ s' B% w! f
print("选择的文件路径:", file_path)
: W& J* ~' W4 q* Y1 T8 s
3 F8 K) b9 |3 _4 A
return file_path
复制代码
9 r& C% S* f8 g3 E
# 打开原图像
8 ^! V' C) M% X" p
& m0 h: S6 P7 E1 w* u8 s; H
# img = Image.open('image.png')
4 w# N8 F4 J& ?3 S4 |' y( P
& F2 o( p0 m: z& h
filePath = open_file_dialog()
) Y& U3 _; @2 y9 E% t3 [- h
8 e/ }' x. f9 u& D
img = Image.open(filePath)
3 O" b0 k/ o! J: Z. j/ \4 [
# M4 }3 n) H7 ~- g# w
# 设置增强因子
+ l l4 S8 i: S3 g: C
1 L) n; ^( i8 b/ _6 }- S( N9 v
factor = float(input('请输入增强系数(1.0~99.9):'))
0 v1 z* D3 s6 L2 b$ P
* T2 O5 K% g$ j* P0 l4 V
( l8 `; f( x- ` P
( @9 \! e) x2 i7 a- \2 A
enhancer = ImageEnhance.Sharpness(img)
, I2 q6 A4 F& j# d
2 m5 D& t4 s0 H% T
2 \* e* l g; k$ e
4 a. `$ N7 X2 x7 N
# 增强图片
! j6 A6 c5 T9 e; j" p' I
' z5 }- g7 {- K, p: d \8 K
img_enhanced = enhancer.enhance(factor)
M8 O7 ~; b5 ^6 H' M5 S
) H1 J% ?& C% j* ]1 k; I1 A) @
7 F+ G% b1 O/ Y
' o8 w0 F3 @4 ~6 D
# 保存增强后的图像
* E g- Z, B3 ^; ^, P7 ?
; M4 m4 z9 j9 t( W: n
arr = filePath.split('/')
; M7 H+ [. }" Y+ F$ Y8 |
, i& x, g3 D% Y6 b4 S
i=0
( w" a" b& s& [5 j
8 C* z( t; n" T5 w
fileDir=''
1 g" A1 \& u0 J- k# c# [ f
u2 g' R7 C$ x+ C: [% d( X
len = len(arr)
0 t9 f5 J8 V. @& q* B3 J
# w* y# I) E5 ]8 K4 x
while i < len-1:
7 `9 [! g, {. p' {% u
- p; ~# ^/ I% o
fileDir += arr[i]+'/'
7 R' ^% E5 n; w: O6 J G% b
2 R. a2 H5 ?, I, |. a7 A9 P
i += 1
1 v0 c. Q; x) r9 t
" z K) T5 x; o% l, b- m
Q+ Z" b* y. N, L; R$ I0 ~; B
! @' M" D+ n B4 D
img_enhanced.save(fileDir+'output'+factor.__str__()+arr[len-1])
K3 T$ |7 ^7 X5 C k1 _1 N7 ^
4 ~( j4 ~' z; ?+ d3 w
print('输出文件为:'+fileDir+'output'+factor.__str__()+arr[len-1])
复制代码
应用层面的话复制上面代码直接执行即可,唠叨两句讲讲我的实现思路:open_file_dialog()函数使用 tkinter 实现文件获取拿到文件名,用于识别需要修复的image;然后使用 PIL 的增强功能生成好画质修复后的图片;路径拼接确定输出路径和文件名为原路径下的output+原文件名,下面附上PIL的另外两个基础功能,如果有提升锐度和对比度的需求也可以自行改写相关代码:
" I$ }0 O/ A: |
+ C W; c" D8 K y! ?8 z
增强锐度
from PIL import Image, ImageEnhance
: [1 p0 C J/ H
2 ?2 F: S% ]$ v! X+ t' y* {6 h
* w4 H0 x* A! W x# t# M z' E8 S% n
, T) e$ x: N: w
# 打开图片
9 c+ w8 K8 c }6 t0 T. W
* B4 O: K. K) t" t+ m
img = Image.open('image.png')
/ D' d6 f' r) N
" `8 j, Y8 A$ u8 T: J# ^8 ^2 V2 S
! @: H( p0 u& h: N8 N% p; q
1 c" Y) i% P8 J- w. t/ S/ Q: y, I
# 增强锐度
( a/ c# p) i3 _
+ ?( w! B0 r: K( {2 M0 n$ w$ W
sharpness = ImageEnhance.Sharpness(img)
, _: ~; t) |3 S7 C+ l
" ?: ^6 D `, a+ @; h" R
img = sharpness.enhance(1.5)
) ^; r( c2 e9 [8 m
/ y9 A T _9 a
" I% v0 F. ?, X) `! k* g% s% N+ ^
7 s$ b9 F/ w+ m' v4 v/ U
# 显示图片
6 q5 [$ J+ D* O' b3 W( C4 s
0 b! w; E2 i( o, j5 Y7 i2 ]
img.show()
复制代码
增强对比度
from PIL import Image, ImageEnhance
) q+ p- ~: }1 o* ]: |% C& h
2 Q6 d) U$ S, y p, x' Y; |3 p
# i8 c( e$ i" U, ~
A# N/ o8 |) j) \- ]; W
# 打开图片
, Q: m' W) q" \$ W
! f$ N3 u' n% s% y: \9 P
img = Image.open('image.png')
: H5 Y- b! o+ e) [. u" O9 K8 I- A
' j% A( d* @( K- [
1 h& H3 m* K6 v% T6 g A" F2 ^. \
' k8 _7 x/ f0 U
# 增强对比度
& |' v$ G( `, l" Q
. C. ?7 r+ O' C
contrast = ImageEnhance.Contrast(img)
# v( R2 R/ b0 t* Y
, w c- {9 t! C; T2 W
img = contrast.enhance(1.5)
+ P- L3 Y+ c# m/ ^- v ~
" \+ u" p$ k7 ?( t4 r
- Y: {9 X9 ?/ I6 T# R
: Y: R! [& k! |0 O4 T! r# r
# 显示图片
! R3 i0 X1 t6 O3 p* T
# t) Q) h- a+ @4 s% t+ f
img.show()
复制代码
% O0 F; x6 o& L3 `" j
欢迎光临 数学建模社区-数学中国 (http://www.madio.net/)
Powered by Discuz! X2.5