返回顶部
首页 > 资讯 > 后端开发 > Python >python中如何提高图像质量
  • 241
分享到

python中如何提高图像质量

python提高图像质量python图像质量python图像 2023-05-19 14:05:28 241人浏览 安东尼

Python 官方文档:入门教程 => 点击学习

摘要

目录python提高图像质量概述百度智能云PIL实现OpenCV实现Python实现图像质量评价准则PSNR总结python提高图像质量 概述 调研了一些提高图像质量的方式 深度学习

python提高图像质量

概述

调研了一些提高图像质量的方式

  • 深度学习方法,如微软的Bringing-Old-Photos-Back-to-Life的模型等。存在一些问题,首先是使用深度学习方法没有刚好的模型,得在自己的数据集上微调,比较麻烦,其次是带来的推理时间开销会比较大,不是特别划算,毕竟只是一个小环节。
  • 商用api,发现百度智能云提供了很多这方面的API,调用相当方便,但是免费次数有限啊。
  • 基于python自带的PIL 实现图片亮度增强、饱和度增强、对比度增强以及锐度增强。
  • 基于opencv实现数字图像处理!!!

百度智能云

官方教程:链接

参考代码(方便的一塌糊涂):

from aip import AipImageProcess
import base64
import os
APP_ID = ''
API_KEY = ''
SECRET_KEY = ''
client = AipImageProcess(APP_ID, API_KEY, SECRET_KEY)
""" 读取图片 """
def get_file_content(filePath):
    with open(filePath, 'rb') as fp:
        return fp.read()
def get_all_file(path):
    all_file=[]
    for i in os.listdir(path):
        file_name=os.path.join(path,i)
        all_file.append(file_name)
    return all_file
for img_path in get_all_file('img'):
    image = get_file_content(img_path)
    """ 调用图像清晰度增强 """
    if not os.path.exists('output'):
        os.mkdir('output')
    response = client.imageDefinitionEnhance(image)
    imgdata = base64.b64decode(response['image'])
    file = open(os.path.join('output', img_path.split('\\')[-1]), 'wb')
    file.write(imgdata)
    file.close()

PIL实现

from PIL import Image
from PIL import ImageEnhance
import numpy as np
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['FangSong'] # 设置字体以便正确显示汉字
plt.rcParams['axes.unicode_minus'] = False # 正确显示连字符
# 原图
image = Image.open('img/timg.jpg')
# 亮度增强
enh_bri = ImageEnhance.Brightness(image)
brightness = 2
image_brightened = enh_bri.enhance(brightness)
# 色度增强(饱和度↑)
enh_col = ImageEnhance.Color(image)
color = 2
image_colored = enh_col.enhance(color)
# 对比度增强
enh_con = ImageEnhance.Contrast(image)
contrast = 2
image_contrasted = enh_con.enhance(contrast)
# 锐度增强
enh_sha = ImageEnhance.Sharpness(image)
sharpness = 4.0
image_sharped = enh_sha.enhance(sharpness)
fig,axes=plt.subplots(nrows=2,ncols=3,figsize=(10,8),dpi=100)
axes[0,0].imshow(np.array(image, dtype=np.uint8)[:,:,::-1])
axes[0,0].set_title("原图")
axes[0,1].imshow(np.array(image_brightened, dtype=np.uint8)[:,:,::-1])
axes[0,1].set_title("亮度增强")
axes[0,2].imshow(np.array(image_colored, dtype=np.uint8)[:,:,::-1])
axes[0,2].set_title("饱和度增强")
axes[1,0].imshow(np.array(image_contrasted, dtype=np.uint8)[:,:,::-1])
axes[1,0].set_title("对比度增强")
axes[1,1].imshow(np.array(image_sharped, dtype=np.uint8)[:,:,::-1])
axes[1,1].set_title("锐度增强")
axes[1,2].imshow(np.array(image_sharped, dtype=np.uint8)[:,:,::-1])
axes[1,2].set_title("锐度增强")
plt.show()

opencv实现

链接

python实现图像质量评价准则PSNR

计算PSNR的Python代码,网上有下面两种:

import cv2
import numpy as np
import math
def psnr1(img1, img2):
   mse = np.mean((img1 - img2) ** 2 )
   if mse < 1.0e-10:
      return 100
   return 10 * math.log10(255.0**2/mse)
def psnr2(img1, img2):
   mse = np.mean( (img1/255. - img2/255.) ** 2 )
   if mse < 1.0e-10:
      return 100
   PIXEL_MAX = 1
   return 20 * math.log10(PIXEL_MAX / math.sqrt(mse))

理论上,这两种计算方式都对应上面的计算公式,在输入图像一样的情况下,这两段代码的结果应该是一样的。

但是,在调用这段代码的时候,我发现这两者的结果却相差很远,同样的图片,psnr1的结果大概是29,而psnr2的结果是12。

gt = cv2.imread('1.jpg')
img= cv2.imread('2.jpg')
print(psnr1(gt,img))
print(psnr2(gt,img))

单看代码的话完全看不出来任何问题,后来我输出了这两张图像作差的结果,发现所有的值都是在0-255之间的,比如img1的一个像素值是30,img2的一个像素值是60,二者作差,本来应该是-30,但是结果却是226,即对于负值,输出要加上256。

所以,问题就出在这行代码上:

mse = np.mean((img1 - img2) ** 2 )

如果img1某个点的像素比img2小,而两者差别又比较大,这个绝对值比较大的负值就会变成一个比较小的正值,MSE的结果也会偏小,那么PSNR的值就会偏大。

只要把上面那行代码改成mse = np.mean((img1/1.0 - img2/1.0) ** 2 )就可以了。

最后,我们发现这两个结果是一样的了。

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程网。

--结束END--

本文标题: python中如何提高图像质量

本文链接: https://lsjlt.com/news/213314.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • python中如何提高图像质量
    目录python提高图像质量概述百度智能云PIL实现opencv实现python实现图像质量评价准则PSNR总结python提高图像质量 概述 调研了一些提高图像质量的方式 深度学习...
    99+
    2023-05-19
    python提高图像质量 python图像质量 python图像
  • Python心得--如何提高代码质量
      前些日子用python基于prometheus开发了一个vsphere volume卷监控的exporter,于是跟vsphere的api(pyvmomi)接口打上了交道,开发的过程中你会发现pyvmomi的接口返回的对象好多列表类型的...
    99+
    2023-01-31
    心得 代码 质量
  • 如何在 Python 中使用容器来提高代码质量?
    在 Python 中,容器是一种非常有用的数据结构,用于存储和组织数据。Python 提供了多种容器类型,如列表、元组、集合和字典等。使用容器可以极大地提高代码的可读性、可维护性和可扩展性。在本文中,我们将讨论如何在 Python 中使用容...
    99+
    2023-07-02
    容器 http shell
  • 如何使用Android Studio提高App质量
      Android Studio作为现在谷歌主推的Android开发功能,除了提供了大量的功能帮助快速开发Android代码之外,在代码质量控制方面也提供了很多工具,这些工...
    99+
    2022-06-06
    Android Studio studio app Android
  • PHP CI/CD 如何提高软件质量?
    ci/cd 可显著提升 php 软件质量。通过自动化构建、单元测试、集成测试和功能测试,ci/cd 确保了代码的准确性。此外,自动化部署可快速、安全地将更改部署到生产环境。实践案例表明,...
    99+
    2024-05-09
    php ci/cd git docker composer
  • Python 图像处理教程:如何提高图像细节清晰度
    Python 是一种广泛应用于图像处理的编程语言,它提供了丰富的图像处理库,例如 Pillow 和 OpenCV 等。在进行图像处理时,有时候我们需要提高图像的细节清晰度,以便更好地观察和分析图像。本教程将介绍一些 Python 图像处理技...
    99+
    2023-10-21
    图像处理 python opencv
  • 浅谈如何提高PHP代码的质量
    目录概述1 必备条件2 构建工具3 静态代码分析4 代码风格5 复制 / 粘贴检测器6 想要真正深入的代码分析?概述 我们可以将此归咎于许多原因,但这肯定不仅仅是因为 PHP 生态系...
    99+
    2024-04-02
  • 如何在Go中使用对象来提高代码质量?
    在Go语言中,对象是一种非常重要的编程概念。通过使用对象,我们可以提高代码的可读性和可维护性,同时也可以减少代码的重复性和错误。本文将介绍如何在Go中使用对象来提高代码质量。 一、什么是对象? 在面向对象编程中,对象是一个实例,包含数据和方...
    99+
    2023-11-10
    对象 bash npm
  • 如何编写高质量的Python程序
    今天就跟大家聊聊有关如何编写高质量的Python程序,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。如何编写高质量的python程序代码规范首先阅读下面的两份规范,并深入理解。Pyth...
    99+
    2023-06-17
  • python cv2图像质量压缩的算法示例
    使用opencv对图像进行编码,一方面是图像二进制传输的需要,另一方面对图像压缩。以jpeg压缩为例: 1、转为二进制编码 img = cv2.imread(img_path) # 取值范围:0~100,数值越小...
    99+
    2022-06-02
    python cv2 图像质量压缩 python 图像压缩 python 图片质量压缩
  • JavaScript的编程技巧:如何提高代码质量?
    JavaScript是一种广泛使用的编程语言,可以用于开发各种类型的应用程序,包括网站、桌面应用程序、移动应用程序等。然而,编写高质量的JavaScript代码并不容易。在本文中,我们将探讨一些JavaScript编程技巧,以提高代码质量。...
    99+
    2023-10-15
    编程算法 javascript git
  • LeetCode 和 NPM 打包:如何提高 PHP 代码质量?
    在日常开发中,我们经常会遇到一些需要高质量 PHP 代码的场景,比如开发一个高性能的 Web 服务器、编写一个数据结构算法等等。为了提高代码质量,我们可以借鉴一些优秀的工具,比如 LeetCode 和 NPM 打包。 LeetCode 是...
    99+
    2023-08-15
    leetcode npm 打包
  • Python 编程算法:如何使用二维码提高代码质量?
    二维码是一种快速、简便的信息编码方式,它可以把大量的信息压缩成一个小小的二维码图形。在编程中,我们可以利用二维码来提高代码的质量和可读性。本文将介绍如何使用 Python 编程算法来实现二维码的生成和解码,并演示如何将其应用于实际项目中。...
    99+
    2023-08-20
    二维码 leetcode 编程算法
  • ASP存储和Git:如何在团队中提高代码质量?
    随着团队协作的普及,如何提高代码质量成为了一个重要的问题。在ASP开发中,如何使用Git版本控制系统来管理代码,使团队更加高效协作,也成为了重要的议题。本文将为你介绍ASP存储和Git的基本概念,并通过演示代码来展示如何在团队中提高代码质...
    99+
    2023-08-25
    存储 django git
  • SEO如何定义高质量与低质量内容
    这篇文章给大家分享的是有关SEO如何定义高质量与低质量内容的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。1、什么是高质量内容  我们知道搜索引擎的本质是希望在知识与用户之间建立快速的桥梁,使得...
    99+
    2023-06-13
  • 手把手教你用Python中的Linting提高代码质量
    目录前言前提条件Linting Python 代码建立环境开始使用 Linting在单个文件上运行Pylint在一个目录上运行Pylint抑制警告用Linting更好、更安全地编写代...
    99+
    2023-01-17
    python linting python代码优化 python代码优化技巧
  • 租用香港服务器建站如何提高质量
    租用香港服务器建站提高质量的方法:1、定期创建和发布原创优质内容,提高网站排名、索引量、内容页面的收录量,从而增加网站的曝光度;2、对香港服务器网站进行维护,提高网站稳定性,给予用户良好的体验感;3、租用稳定性强的香港服务器,保障网站的正常...
    99+
    2024-04-02
  • C++ 函数单元测试如何提高代码质量?
    单元测试是软件开发中针对单个函数进行的自动化测试,以确保其正确性和健壮性。在 c++++ 中可以使用 catch2 等库进行单元测试:包含头文件,定义测试用例,进行断言,构建和运行测试。...
    99+
    2024-04-23
    单元测试 代码质量 c++ 重构代码
  • 如何在Python项目中使用打包文件框架来提高代码质量?
    Python是一种强大的编程语言,广泛应用于数据科学、Web开发、人工智能和许多其他领域。在Python项目中,使用打包文件框架可以提高代码质量,使代码更易于维护和分发。本文将介绍如何在Python项目中使用打包文件框架来提高代码质量。 一...
    99+
    2023-06-22
    打包 文件 框架
  • IDE索引:如何在Java和Laravel开发中提高代码质量?
    在当今软件开发领域,写出高质量的代码是非常重要的。好的代码可以让你的项目更加稳定、可靠,并且可以减少维护成本。在Java和Laravel开发中,使用集成开发环境(IDE)可以大大提高代码质量。本文将介绍一些IDE索引,帮助你在Java和L...
    99+
    2023-10-10
    laravel ide 索引
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作