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()

第一张图显示降级输入,第二个图像是面具,第三个图像是第一个算法的结果,最后一个图像是第二个算法的结果。

python 用opencv实现图像修复和图像金字塔

图像金字塔

通常,我们曾经使用恒定大小的图像.但在某些情况下,我们需要使用不同分辨率的(相同)图像.例如,在搜索图像中的某些内容时,如脸部,我们不确定该对象在所述图像中的大小.

具有不同分辨率的图像被称为图像金字塔(因为当它们保持在堆叠中,底部具有最高分辨率图像而顶部具有最低分辨率图像时,它看起来像金字塔).

图像金字塔有两种:

  1. 高斯金字塔和

  2. 拉普拉斯金字塔

高斯金字塔的顶部是通过将底部图像中的连续的行和列去除得到的.顶部图像中的每个像素值等于下一层图像中 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()

python 用opencv实现图像修复和图像金字塔

继续使用函数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()

python 用opencv实现图像修复和图像金字塔

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()

python 用opencv实现图像修复和图像金字塔

来源:https://segmentfault.com/a/1190000015846719

标签:python,图像修复,图像金字塔
0
投稿

猜你喜欢

  • 最常用的PHP正则表达式收集整理

    2024-05-03 15:34:56
  • Vue开发工具之vuejs-devtools安装教程及常见问题解决(最详细)

    2024-05-10 14:09:33
  • Pandas查询数据df.query的使用

    2021-06-09 03:48:47
  • Python装饰器实现方法及应用场景详解

    2022-04-30 22:57:49
  • Mysql学习之数据库检索语句DQL大全小白篇

    2024-01-24 16:52:39
  • MySQL8设置自动创建时间和自动更新时间的实现方法

    2024-01-17 08:02:44
  • python实现在字符串中查找子字符串的方法

    2022-07-03 15:37:50
  • Python ArcPy实现批量拼接长时间序列栅格图像

    2021-09-07 18:48:53
  • 如何利用Python监控别人的网站

    2022-08-11 16:54:18
  • Python爬虫Requests库的使用详情

    2023-05-22 20:15:52
  • Http头 Range、Content-Range

    2010-06-25 19:19:00
  • 网马解密大讲堂——网马解密中级篇(Eval篇)

    2009-09-16 16:04:00
  • js中各浏览器中鼠标按键值的差异

    2024-05-05 09:15:28
  • Firefox Bug: inline/inline-block的间隙

    2009-11-03 13:20:00
  • mysql常用备份命令和shell备份脚本分享

    2024-01-13 14:37:35
  • Python3转换html到pdf的不同解决方案

    2021-10-03 19:50:03
  • ASP.NET Core中的Configuration配置一

    2024-06-05 09:32:59
  • PHP保留两位小数的几种方法

    2023-11-15 05:17:54
  • python基础之入门必看操作

    2023-10-21 17:46:55
  • python数据分析之聚类分析(cluster analysis)

    2022-12-28 08:24:02
  • asp之家 网络编程 m.aspxhome.com