python 用opencv实现图像修复和图像金字塔
作者:Sakurala 发布时间:2022-09-27 09:24:22
我们将学习如何通过一种称为修复的方法去除旧照片中的小噪音,笔画等。基本思路很简单:用相邻像素替换那些坏标记,使其看起来像邻域。
cv2.inpaint()
cv2.INPAINT_TELEA
cv2.INPAINT_NS
import numpy as np
import cv2 as cv
img = cv.imread('messi_2.jpg')
mask = cv.imread('mask2.png',0)
dst = cv.inpaint(img,mask,3,cv.INPAINT_TELEA)
cv.imshow('dst',dst)
cv.waitKey(0)
cv.destroyAllWindows()
第一张图显示降级输入,第二个图像是面具,第三个图像是第一个算法的结果,最后一个图像是第二个算法的结果。
图像金字塔
通常,我们曾经使用恒定大小的图像.但在某些情况下,我们需要使用不同分辨率的(相同)图像.例如,在搜索图像中的某些内容时,如脸部,我们不确定该对象在所述图像中的大小.
具有不同分辨率的图像被称为图像金字塔(因为当它们保持在堆叠中,底部具有最高分辨率图像而顶部具有最低分辨率图像时,它看起来像金字塔).
图像金字塔有两种:
高斯金字塔和
拉普拉斯金字塔
高斯金字塔的顶部是通过将底部图像中的连续的行和列去除得到的.顶部图像中的每个像素值等于下一层图像中 5 个像素的高斯加权平均值.这样操作一次一个 MxN 的图像就变成了一个 M/2xN/2 的图像。所以这幅图像的面积就变为原来图像面积的四分之一.这被称为an Octave(一个八度)。连续进行这样的操作就会得到一个分辨率不断下降的图像金字塔.
函数cv2.pyrDown()从一个高分辨率大尺寸的图像向上构建一个金子塔 (尺寸变小,分辨率降低).
代码:
import cv2
img = cv2.imread('img.jpg')
lower_reso = cv2.pyrDown(img)
cv2.imshow('src',img)
cv2.imshow('HigherReso',lower_reso)
cv2.waitKey()
继续使用函数cv2.pyrUp()从一个低分辨率小尺寸的图像向下构建一个金子塔(尺寸变大,但分辨率不会增加)
代码:
import cv2
img = cv2.imread('img.jpg')
lower_reso = cv2.pyrDown(img)
higher_reso2 = cv2.pyrUp(lower_reso)
cv2.imshow('show',higher_reso2)
cv2.waitKey()
NOTE:
当用 cv2.pyrDown(),图像的分辨率就会降低,信息就会被丢失.如果先cv2.pyrDown()产生的中间图像再使用函数cv2.pyrUp()得到图像,与原图像相比分辨率差了很多.
可以修改代码:
import cv2
img = cv2.imread('img.jpg')
higher_reso2 = cv2.pyrUp(img)
lower_reso = cv2.pyrDown(higher_reso2)
cv2.imshow('show',lower_reso)
cv2.waitKey()
拉普拉斯金字塔由高斯金字塔形成,大部分元素都是零,用于图像压缩.
代码:
import cv2
img = cv2.imread('img.jpg')
img = cv2.Canny(img, 100, 200)
higher_reso2 = cv2.pyrUp(img)
lower_reso = cv2.pyrDown(higher_reso2)
cv2.imshow('src',img)
cv2.imshow('higher_reso2',higher_reso2)
cv2.imshow('lower_reso',lower_reso)
cv2.waitKey()
来源:https://segmentfault.com/a/1190000015846719
猜你喜欢
- 这篇日志完全是看了一篇日志后的启发,原文为: * 的eval和new Function。很少使用new Array的方式来定义数组,没想到ne
- 我就废话不多说了,直接上代码吧:package mainimport ("flag""fmt"&qu
- Python自动的os库是和操作系统交互的库,常用的操作包括文件/目录操作,路径操作,环境变量操作和执行系统命令等。文件/目录操作获取当前目
- 最近 全栈数据工程师养成攻略 的微信群已经将近500人,开了二群之后为了打通不同微信群之间的消息,花了点时间做了个消息同步机器人,在任意群收
- 用SQL语句添加删除修改字段 1.增加字段 alter table docdsp add dspcode char(200) 2.删除字段
- 目录1.字典的介绍2.访问字典的值(一)根据键访问值(二)通过get()方法访问值3.修改字典的值4.添加字典的元素(键值对)5.删除字典的
- 本文实例讲述了Python画图的基本方法。分享给大家供大家参考,具体如下:Python:使用matplotlib绘制图表python绘制图表
- 这可能是一个非常简单的问题,但是今天花一点点时间把这个简单的问题在说清晰一点,相信大家对CSS的学习和认识会很有帮助,强化一些概念的东西,对
- 下面是Sql Server 和 Access 操作数据库结构的常用Sql,如如何新建一个表,如何删除表,如何删除数据,插入数据等等..希望对
- 客户端: <%@ Page Language="C#" AutoEventWireup="true&qu
- PyCharm 中在使用Turtle(海龟)库绘图体系时,代码明明是正确可以运行的,但是没有提示 ,代码出现黄色标记以及红色波浪线 ,经验不
- 本文实例为大家分享了python实现双色球随机选号的具体代码,供大家参考,具体内容如下双色球随机选号实现代码from random impo
- 一、摘要Python使用被称为异常 的特殊对象来管理程序执行期间发生的错误。每当发生让Python不知所措的错误时,它都会创建一个异常对象。
- 這兩天﹐對xml作為數據庫產生了興趣﹐找了一些資料﹐也搞出了一點眉目﹐在這里記錄一下。算是對自己學習x
- 在了解XHTML代码规范后,我们就要进行CSS布局。首先先介绍一些CSS的入门知识。如果你已经很熟悉了,可以跳过这一节。CSS是Cascad
- 本文实例讲述了PHP开发实现微信退款功能。分享给大家供大家参考,具体如下:最近在调微信退款接口,发现有许多坑,更大家分享一下① 要是在测试的
- 1、安装pecl及创建快捷键(若安装php时已带可忽略这步安装步骤)# cd /usr/local/php/bin/ //可查看
- 很长时间以来,一直想将自己的一些零碎的想法总结下,给自己一个完整的思维,也算是做个存档。一家之言,绝不敢说对别人会有什么帮助,对外人的层面上
- 基本简介dot函数为numpy库下的一个函数,主要用于矩阵的乘法运算,其中包括:向量内积、多维矩阵乘法和矩阵与向量的乘法。1. 向量内积向量
- 建立合理的索引提高SQL Server的性能在应用系统中,尤其在联机事务处理系统中,对数据查询及处理速度已成为衡量应用系统成败的标准。而采用