Opencv实现图片和视频的加噪、平滑处理

news/2025/1/1 13:38:56/

图片和视频的加噪、平滑处理

目录

  • 图片和视频的加噪、平滑处理
    • 图片加噪
    • 图片平滑处理
      • 均值滤波
      • 方框滤波
      • 高斯滤波
      • 中值滤波
    • 视频平滑处理

图片加噪


还需要导入numpy库
定义的是椒盐噪声
代码展示:

python">def nosie_img(img,n=10000):img = img.copy()# 取shape的前两个值,即图片大的高宽h,w = img.shape[:2]for  i in range(n):# 随机生成像素值x,y对应的是h,wx = np.random.randint(1,h)y = np.random.randint(1,w)# 随机生成0,1,如果为0该点为黑点,否则为白点,黑白概率相同if np.random.randint(0,2) == 0:img[x,y] = 0else:img[x, y] = 255#返回图像return imga = cv2.imread('at1.png')
a_noise = nosie_img(a)
cv2.imshow('a',a)
cv2.waitKey(0)
cv2.imshow('a_noise',a_noise)
cv2.waitKey(0)

运行结果:
在这里插入图片描述

图片平滑处理


均值滤波

  • 概念:以像素点为中心的周围的n*n个像素值的均值代替当前像素值,n尽量为奇数,边界自动扩展。
  • 格式:cv2.blur(a,(n,n))
    a:图片变量
    (n,n):均值范围

代码展示:

python">def nosie_img(img,n=10000):img = img.copy()h,w = img.shape[:2]for  i in range(n):x = np.random.randint(1,h)y = np.random.randint(1,w)if np.random.randint(0,2) == 0:img[x,y] = 0else:img[x, y] = 255return imga = cv2.imread('at1.png')
a_noise = nosie_img(a)
a_noise_blur_3 = cv2.blur(a_noise,(3,3))
cv2.imshow('a',a)
cv2.waitKey(0)
cv2.imshow('a_noise',a_noise)
cv2.waitKey(0)
cv2.imshow('a_noise_blur_3',a_noise_blur_3)
cv2.waitKey(0)

运行结果:
在这里插入图片描述

方框滤波

  • 概念:以像素点为中心的周围的nn个像素,normalize True时与均值滤波相同,normalize Fales时,nn个像素值的和大于255时为255,边界自动扩展。
  • 格式:cv2.boxFilter(a,(n,n),normalize=True/Fales)

代码展示:

python">def nosie_img(img,n=10000):img = img.copy()h,w = img.shape[:2]for  i in range(n):x = np.random.randint(1,h)y = np.random.randint(1,w)if np.random.randint(0,2) == 0:img[x,y] = 0else:img[x, y] = 255return img
a = cv2.imread('at1.png')
a_noise = nosie_img(a)
cv2.imshow('a',a)
cv2.waitKey(0)
cv2.imshow('a_noise',a_noise)
cv2.waitKey(0)
#方框滤波
a_noise_boxfilter_T = cv2.boxFilter(a_noise,-1,(3,3),normalize=True)
a_noise_boxfilter_F = cv2.boxFilter(a_noise,-1,(3,3),normalize=False)
cv2.imshow('a_noise_boxfilter_T',a_noise_boxfilter_T)
cv2.waitKey(0)
cv2.imshow('a_noise_boxfilter_F',a_noise_boxfilter_F)
cv2.waitKey(0)

运行结果:
在这里插入图片描述

高斯滤波

  • 概念:以像素点为中心的周围的n*n个像素,加权运算得到最终像素值,边界自动扩展。
  • 格式:cv2.GaussianBlur(a,(n,n),1) 1表示正态分布,确定权重分布

代码展示:

python">def nosie_img(img,n=10000):img = img.copy()h,w = img.shape[:2]for  i in range(n):x = np.random.randint(1,h)y = np.random.randint(1,w)if np.random.randint(0,2) == 0:img[x,y] = 0else:img[x, y] = 255return imga = cv2.imread('at1.png')
a_noise = nosie_img(a)
cv2.imshow('a',a)
cv2.waitKey(0)
cv2.imshow('a_noise',a_noise)
cv2.waitKey(0)
#高斯滤波
a_noise_gauss = cv2.GaussianBlur(a_noise,(3,3),1)
cv2.imshow('a_noise_gauss',a_noise_gauss)
cv2.waitKey(0)

运行结果:
在这里插入图片描述

中值滤波

  • 概念:以像素点为中心的周围的n*n个像素,从小到大排序,取中值为像素值,边界自动扩展。
  • 格式:cv2.medianBlur(a,n)
    n:表示取中值范围,必须为奇数

代码展示:

python">def nosie_img(img,n=10000):img = img.copy()h,w = img.shape[:2]for  i in range(n):x = np.random.randint(1,h)y = np.random.randint(1,w)if np.random.randint(0,2) == 0:img[x,y] = 0else:img[x, y] = 255return imga = cv2.imread('at1.png')
a_noise = nosie_img(a)
cv2.imshow('a',a)
cv2.waitKey(0)
cv2.imshow('a_noise',a_noise)
cv2.waitKey(0)
#中值滤波
a_noise_median = cv2.medianBlur(a,3)
cv2.imshow('a_noise_median',a_noise_median)
cv2.waitKey(0)
cv2.destroyAllWindows()

运行结果:
在这里插入图片描述

视频平滑处理

代码展示:

python"># 加噪处理
def nosie_img(img,n=10000):img = img.copy()h,w = img.shape[:2]for  i in range(n):x = np.random.randint(1,h)y = np.random.randint(1,w)if np.random.randint(0,2) == 0:img[x,y] = 0else:img[x, y] = 255return img#视频处理
#读取视频
v = cv2.VideoCapture('test_v.mp4')
# 打不开退出
if not v.isOpened():print("无法打开视频")exit()#打开读取
while True:r, f = v.read()#视频加噪f_noise = nosie_img(f)#视频中值滤波处理f_noise_median = cv2.medianBlur(f_noise,3)if not r:breakcv2.imshow('video',f)cv2.imshow('video_f_noise', f_noise)cv2.imshow('video_f_noise_median', f_noise_median)#点击空格键,退出播放if cv2.waitKey(10) == 32:breakv.release()
cv2.destroyAllWindows()

运行结果:
在这里插入图片描述


http://www.ppmy.cn/news/1559125.html

相关文章

使用 Python 操作 Excel 表格

在Python中操作Excel表格,你可以使用几个流行的库,比如openpyxl、pandas和xlrd/xlwt。下面我会分别介绍这些库的基本用法。 1. 使用 openpyxl openpyxl 是一个用来读写Excel 2010 xlsx/xlsm/xltx/xltm文件的Python库。 安装: pip install ope…

进军AI大模型-环境配置

语言环境配置 合法上网工具: 这个T子试试,一直稳定。走我链接免费用5天: https://wibnm.com/s/ywtc01/pvijpzy python版本: python3.12 Langchain: Introduction | 🦜️🔗 LangChain v0.3 9月16日升级的版本 pip3…

实验4:查找与排序综合应用

实验4:查找与排序综合应用 采用二分查找的方法实现查找 (1)定义顺序表的存储结构; (2)实现顺序表上二分查找;采用二叉排序树实现查找 (1)定义二叉链表的存储结构&#x…

【工具变量】地级市减碳重视程度及减碳词频数据(2003-2024年)

一、测算方式:参考C刊《管理评论》佟岩(2024)老师的做法,使用各年度省级政府工作报告中“减碳”关键词的词频总数来测度地方政府对“减碳”的重视程度,“减碳”关键词包括二氧化碳、低碳、减排、节能、能耗、环境保护&…

vue2前端导出pdf文件

目录 1、安装依赖 ?2、demo 2.1 demo1导出效果 2.2?demo2导出效果 2.3?demo3导出效果 3、源码? 3.1 demo1 3.2 demo2 3.3 demo2 1、安装依赖 导出PDF通常涉及将HTML内容转换为图片(截图),然后将这些图片插入到PDF文档中。这个过…

v-if 和 v-for 优先级

一、优先级规则 在 Vue.js 中&#xff0c;v-for的优先级比v-if高。这意味着当它们同时出现在一个元素上时&#xff0c;v-for会首先被解析和执行。 <div v-for"item in items" v-if"shouldShow(item)">{{ item }}</div> 二、可能导致的问题 …

Vuex用法

在 Vue.js 项目中&#xff0c;src/store 目录通常用于存放 Vuex store 文件。Vuex 是 Vue 的状态管理库&#xff0c;帮助你更有效地管理应用的状态&#xff0c;特别是在构建大型单页应用程序&#xff08;SPA&#xff09;时。通过集中存储和管理应用的所有组件的状态&#xff0c…

windows C#-显式实现接口成员

本示例声明一个接口IDimensions 和一个类 Box&#xff0c;显式实现了接口成员 GetLength 和 GetWidth。 通过接口实例 dimensions 访问这些成员。 interface IDimensions {float GetLength();float GetWidth(); }class Box : IDimensions {float lengthInches;float widthInch…