数学建模社区-数学中国
标题:
三行代码实现图像画质修复,图片清晰度修复,清晰度提升python
[打印本页]
作者:
2744557306
时间:
2024-3-21 09:28
标题:
三行代码实现图像画质修复,图片清晰度修复,清晰度提升python
核心代码
# 原始文件
7 W8 C* Q+ p$ F
; W& p8 F \. F4 ~' x, G
enhancer = ImageEnhance.Sharpness(Image.open('文件路径.png'))
& _2 p# G4 U8 l% `1 Z6 t- \
! i5 }( k, E# A% m
# 增强图片
( ]/ f, D# o8 f& [* L7 M
" {$ ^ i T7 Y' W
img_enhanced = enhancer.enhance(增强系数float)
9 j- }7 F( y8 x) ^3 E0 K
. ]' I, T3 U/ d* c$ R8 D& U
# 输出目标文件
S$ I1 N6 O9 j2 X
# y. L/ U3 p6 N7 n8 l
img_enhanced.save('文件名.png')
复制代码
注意,输入输出文件格式必须一致
0 x/ ~* {" r+ V1 d
9 Z# s9 g8 m9 r3 _8 _
所需依赖
$ ^! s; P0 g Q6 n& n! g6 z
# 文件选择框,可以直接输相对路径不引入这个
from tkinter import filedialog
M% n. a; Z2 y7 K
# Y7 v) X, _ S y
# 增强
$ f* f' A; C$ n) b" Z; r& o
9 P8 p, H6 H6 ?$ z0 \& p' ?- b
from PIL import Image, ImageEnhance
! \1 ?8 u0 r( f: u
4 `- N% x6 u) q7 ?3 B$ `5 o
代码实现
8 ?5 u/ X& t5 ^7 S. q6 f8 X9 }; m
$ ]. T: { a; x4 w0 h
from tkinter import filedialog
( @* B5 ]+ ]3 e* t% `
& m, m: |4 ~" G2 C7 q
from PIL import Image, ImageEnhance
复制代码
def open_file_dialog():
( i1 F2 a, D8 E Z
( e; R3 M2 s/ f& ^- A+ d1 m
file_path = filedialog.askopenfilename()
# ?) k4 B5 Z3 k. d) W9 S+ z
2 o9 i& F; x1 o. i& o) N; w) E u
# 在这里添加代码,处理文件路径
) r' i6 J- L' H
/ m6 H0 k9 P( g0 U4 Y8 C
print("选择的文件路径:", file_path)
" t8 i( \* h% t( N
3 M2 k3 x. k" }: n X3 ]& O
return file_path
复制代码
) y# s- Z2 a. r6 `+ t+ o A2 o
# 打开原图像
, j4 x1 M6 B" y% B. R9 U
9 z. E! H" D8 d& A! a7 [
# img = Image.open('image.png')
" P( ~3 m( u. I9 P" S, G
; y; I* r4 o% h: l; e4 _( A! X
filePath = open_file_dialog()
1 H( e" `1 S8 j* C9 K* l
, @+ F$ m4 h1 h/ q" A9 }+ b
img = Image.open(filePath)
8 S% b2 b2 D t
5 H2 j% W& g) n: _0 C3 _, @
# 设置增强因子
_, j* z# L: B
- W9 b& u/ A: {# c% G) P
factor = float(input('请输入增强系数(1.0~99.9):'))
$ _) \5 j% l( n- E5 B; D
& _% I/ x |7 w" F+ T1 i
* N5 x, ~4 P- _9 u8 n, d, p
) u& T! | f* H
enhancer = ImageEnhance.Sharpness(img)
: d& L* B$ N) W& K* A
- @1 W! R* g8 X( T# K9 \
; j/ F" N/ D; H8 n" _5 Z
' h! q) d! [0 f5 X- _: h
# 增强图片
/ }* T' r, t/ g. z; `
: _. n" a5 ~7 R! `$ D) U- s2 h
img_enhanced = enhancer.enhance(factor)
& O- _. u i2 F% F7 J0 q% x! Q
$ T f3 w/ \6 @6 U5 a: \# S
; J3 l% y8 V6 }) I3 Z- G$ C! \4 H
1 t* [* D& @2 Y2 ^0 e
# 保存增强后的图像
9 v4 C4 E" n4 E" H
1 f2 R g1 o/ e. A- q5 }
arr = filePath.split('/')
5 z; m; z5 b: h; F% {
9 T3 q a4 C$ t
i=0
: U% @. g, B& H; ]# S
- M+ f2 K# w8 z% l$ `# \% O
fileDir=''
9 [* e# B! f3 ~
( O5 p9 }) i( `! Y- j& r
len = len(arr)
6 i5 W5 p9 _( }4 p6 H; k
& d: J Y* D% F6 K9 M
while i < len-1:
7 @5 F3 \; y* d. G7 l
; F0 ?; F; d* O# b, L1 r; a7 ~1 a
fileDir += arr[i]+'/'
& {% U4 b- `& b$ Y+ o8 I% B! a7 h
; S0 r. U8 ~. e8 S
i += 1
# w+ @, C' H9 {* c2 ]* v
1 L& o9 {" T$ a4 X R2 c
: k1 q6 N2 I! ?+ B5 x- ] q, h
7 W; ]0 k/ ^4 I! a4 k0 z$ u
img_enhanced.save(fileDir+'output'+factor.__str__()+arr[len-1])
: j7 J* a! f M' x9 @( z/ A0 ?% Z
2 o4 K" U" L* b/ {, U8 }
print('输出文件为:'+fileDir+'output'+factor.__str__()+arr[len-1])
复制代码
应用层面的话复制上面代码直接执行即可,唠叨两句讲讲我的实现思路:open_file_dialog()函数使用 tkinter 实现文件获取拿到文件名,用于识别需要修复的image;然后使用 PIL 的增强功能生成好画质修复后的图片;路径拼接确定输出路径和文件名为原路径下的output+原文件名,下面附上PIL的另外两个基础功能,如果有提升锐度和对比度的需求也可以自行改写相关代码:
' w/ z8 V: c. L' b; Z! y4 P
8 Z/ M- ?6 s4 g7 @
增强锐度
from PIL import Image, ImageEnhance
. Q6 u1 ?. [5 K" P
5 a- g" }; I% ?
9 F" J; N t' q- ^, G: v
$ M1 W" D% ]1 ?6 N& W* R H4 T
# 打开图片
T. K' Q' \3 P: v0 X- n8 G% r
9 g- V/ h2 U# \7 r+ M3 M* h$ a
img = Image.open('image.png')
+ r% _) K+ V0 V8 a T1 N
% M/ o( ]* H- f2 E5 ^8 M
7 }2 `- Q- n! v& k
6 `- e+ I6 ~! i% Z$ F* W. @
# 增强锐度
7 K8 w+ P8 T0 g: D; M/ r% P
5 m7 v& T0 |: d* ]9 {
sharpness = ImageEnhance.Sharpness(img)
1 S; h7 |1 |/ B
+ l6 J& e l' v
img = sharpness.enhance(1.5)
' J2 v3 _, g x+ ~$ D4 H) f
- @+ N8 T+ O' p1 g
2 T" J6 ?5 d C
0 R) S. v8 A! {- d0 y
# 显示图片
% u& ]. S. x2 X
* h! L" u7 J7 a$ d" L
img.show()
复制代码
增强对比度
from PIL import Image, ImageEnhance
" E) L7 P+ n# R6 j, k9 [( ]" n t: E
+ q' Y6 N$ r8 @* |9 c
" B8 L& K* f+ a/ g" U; ]- r
& L. \$ ]: ~0 J6 Y/ r
# 打开图片
" K$ v% G9 s! f6 ]- _
# W0 h, c, Z- }1 }
img = Image.open('image.png')
3 l( n$ X& {' e- b
! s% z, S/ Z8 ~
8 k0 V* Y- G2 } P
% ^# n% I: {. k+ i6 B
# 增强对比度
3 \' l' l. b6 ~9 D- }1 }$ }) Y
0 R5 t2 O, h; p" G
contrast = ImageEnhance.Contrast(img)
0 q/ z* C+ ~ j$ ]: ^+ |+ D* L
* q- t; N4 ^+ P. J+ u6 r
img = contrast.enhance(1.5)
; r5 g) M: R% [$ O$ u
2 k) |( H' G* W0 e& |; Y
+ `* e" p1 T( K& m& Z( B( i. N$ }
/ L+ H" @# B1 r% p6 B, K) \3 ]
# 显示图片
a5 p1 K+ W% x5 S, Q
6 f% d# v% Z d- q% Z G# p4 O
img.show()
复制代码
. h4 L9 }1 M1 V1 l0 f
欢迎光临 数学建模社区-数学中国 (http://www.madio.net/)
Powered by Discuz! X2.5