七、模糊操作

一、模糊操作基本原理

1,基于离散卷积
2,定义好每一个卷积核
3,不同卷积核得到不同的卷积效果
4,模糊是卷积的一种表象

二、1*3卷积核举例

每次右移一格,进行对应相乘再求和。1*3的卷积核左右两边的元素并没有处理而是照搬下来。卷积核一般都奇数。
在这里插入图片描述

三、均值模糊

对随机噪声有很好的去噪效果

1,基于平均值的均值模糊

cv2.blur(image,(5,5))需要传入目标图像,定义卷积核大小

import cv2
import numpy as npdef blur(image):dst = cv2.blur(image,(5,5))cv2.imshow("blur",dst)src = cv2.imread(r"G:\Juptyer_workspace\study\opencv\opencv3\a1.jpg")
cv2.imshow("image",src)
blur(src)cv2.waitKey(0)
cv2.destroyAllWindows()

效果图如下:
在这里插入图片描述

2,基于权重的高斯模糊

①概念公式

Ⅰ一维高斯正态分布
在这里插入图片描述在这里插入图片描述
Ⅱ二维高斯公式
在这里插入图片描述在这里插入图片描述
Ⅲ实际上图像是个二维的,若采用二维卷积核去计算的话很耗时,一般采用两个一维卷积核去操作运算
例如二维卷积核在这里插入图片描述
可由在这里插入图片描述在这里插入图片描述
两个一维卷积核来等效替代

②高斯噪声

实际上就是多个随机点分别对应加上原图像上

import cv2
import numpy as npdef clamp(pv):if pv>255: return 255if pv<0: return 0else : return pvdef gaussian_noise(image):h,w,c = image.shapefor row in range(h):for col in range(w):s = np.random.normal(0,20,3)b = image[row,col,0]g = image[row,col,1]r = image[row,col,2]image[row,col,0]=clamp(b+s[0])image[row,col,1]=clamp(g+s[1])image[row,col,2]=clamp(r+s[2])cv2.imshow("noise",image)src = cv2.imread(r"G:\Juptyer_workspace\study\opencv\opencv3\a1.jpg")
cv2.imshow("image",src)
cv2.namedWindow("image",cv2.WINDOW_AUTOSIZE)
t1 = cv2.getTickCount()
gaussian_noise(src)
t2 = cv2.getTickCount()
time = (t2-t1)/cv2.getTickFrequency()# s
print("time is %s"%(time*1000))# mscv2.waitKey(0)
cv2.destroyAllWindows()

效果图如下:在这里插入图片描述

在这里插入图片描述

③高斯模糊

cv2.GaussianBlur(src,(0,0),15)15表示公式中的σ的值

import cv2
import numpy as npsrc = cv2.imread(r"G:\Juptyer_workspace\study\opencv\opencv3\a1.jpg")
cv2.imshow("image",src)
cv2.namedWindow("image",cv2.WINDOW_AUTOSIZE)
dst = cv2.GaussianBlur(src,(0,0),15)
cv2.imshow("GaussianBlur",dst)cv2.waitKey(0)
cv2.destroyAllWindows()

效果图如下:
在这里插入图片描述

④使用高斯模糊消除高斯噪声
import cv2
import numpy as npdef clamp(pv):if pv>255: return 255if pv<0: return 0else : return pvdef gaussian_noise(image):h,w,c = image.shapefor row in range(h):for col in range(w):s = np.random.normal(0,20,3)b = image[row,col,0]g = image[row,col,1]r = image[row,col,2]image[row,col,0]=clamp(b+s[0])image[row,col,1]=clamp(g+s[1])image[row,col,2]=clamp(r+s[2])cv2.imshow("noise",image)src = cv2.imread(r"G:\Juptyer_workspace\study\opencv\opencv3\a1.jpg")
cv2.imshow("image",src)
cv2.namedWindow("image",cv2.WINDOW_AUTOSIZE)t1 = cv2.getTickCount()
gaussian_noise(src)#给图像加入高斯噪声
t2 = cv2.getTickCount()
time = (t2-t1)/cv2.getTickFrequency()# s
print("time is %s"%(time*1000))# ms#dst = cv2.GaussianBlur(src,(0,0),15)
dst = cv2.GaussianBlur(src,(5,5),0)#对加入高斯噪声的图像进行高斯模糊操作
cv2.imshow("GaussianBlur",dst)cv2.waitKey(0)
cv2.destroyAllWindows()

效果图如下:在这里插入图片描述
在这里插入图片描述

二、中值模糊

中值模糊一般用于消除椒盐噪声
cv2.medianBlur(image,5)需要传入目标图像,卷积核大小

import cv2
import numpy as npdef median_blur(image):dst = cv2.medianBlur(image,5)cv2.imshow("median_blur",dst)src = cv2.imread(r"G:\Juptyer_workspace\study\opencv\opencv3\l.png")
cv2.imshow("image",src)
median_blur(src)cv2.waitKey(0)
cv2.destroyAllWindows()

效果图如下:
在这里插入图片描述

三、自定义模糊

cv2.filter2D(image,-1,kernel=kernel1)需要传入目标图像,自定义卷积核

import cv2
import numpy as np'''
之所以有的需要除以25和除以9,是因为所有的卷积核之和为1才行
'''
def custom_blur(image):kernel1 = np.ones([5,5],np.float32)/25 #需要满足卷积核之和为1故需要除以25dst1 = cv2.filter2D(image,-1,kernel=kernel1)cv2.imshow("custom_blur_1",dst1)kernel2 = np.array([[1,1,1],[1,1,1],[1,1,1]],np.float32)/9 #需要满足卷积核之和为1故需要除以9dst2 = cv2.filter2D(image,-1,kernel=kernel2)cv2.imshow("custom_blur_2",dst2)kernel3 = np.array([[0,-1,0],[-1,5,-1],[0,-1,0]],np.float32)#这个卷积核实际上就是图像的锐化dst3 = cv2.filter2D(image,-1,kernel=kernel3)cv2.imshow("custom_blur_3",dst3)src = cv2.imread(r"G:\Juptyer_workspace\study\opencv\opencv3\a1.jpg")
cv2.imshow("image",src)
custom_blur(src)cv2.waitKey(0)
cv2.destroyAllWindows()

效果图如下:
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/378028.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LeetCode 100. 相同的树 思考分析

给定两个二叉树&#xff0c;编写一个函数来检验它们是否相同。 如果两个树在结构上相同&#xff0c;并且节点具有相同的值&#xff0c;则认为它们是相同的。 示例 1: 输入: 1 1 / \ / 2 3 2 3 [1,2,3], [1,2,3]输出: true 示例 2: 输入: 1 1 / 2 2 [1,2], [1,null,2]输…

八、边缘保留滤波(EPF)

一、概念 边缘保留滤波(EPF,edge preserving filtering) 二、高斯双边 cv2.bilateralFilter(image,0,100,15)100为差异&#xff0c;15为周围的区域 import cv2 import numpy as npdef bilateralFilter(image):dst cv2.bilateralFilter(image,0,100,15)cv2.imshow(bilater…

九、图像直方图

一、图像直方图的属性 说白了就是将图像上的各个颜色通道上的像素点的像素值进行统计&#xff0c;例如&#xff1a;像素值为14的像素点个数有几个&#xff0c;进行显示。 图像的像素值取值范围为[0,255]&#xff0c;这个范围也成为直方图的range也就是直方图的横坐标轴 每一个…

BIFR的完整形式是什么?

BIFR&#xff1a;工业和金融重组委员会 (BIFR: Board of Industrial and Financial Reconstruction) BIFR is an abbreviation of the Board of Industrial and Financial Reconstruction. It was an organization of the Government of India and a branch of the Department …

LeetCode 101. 对称二叉树 思考分析

题目 给定一个二叉树&#xff0c;检查它是否是镜像对称的。 例如&#xff0c;二叉树 [1,2,2,3,4,4,3] 是对称的。 1/ 2 2 / \ / 3 4 4 3 但是下面这个 [1,2,2,null,3,null,3] 则不是镜像对称的: 1/ 2 2 \ 3 3 进阶&#xff1a; 你可以运用递归和迭代两种方法解决这个…

直方图反向投影

通过直方图反向投影&#xff0c;根据目标衣服颜色的特征来进行定位 cv2.calcHist([roi_hsv],[0,1],None,[32,48],[0,180,0,256])其中[32,48]表示bin的个数&#xff0c;可以修改&#xff0c;当然范围越小越精确 import cv2 import numpy as np from matplotlib import pyplot …

LeetCode 二叉树、N叉树的最大深度与最小深度(递归解)

目录104. 二叉树的最大深度559. N叉树的最大深度111. 二叉树的最小深度之前的笔记中&#xff0c;已经用层序遍历解决过这个问题了现在试着用深度的解法去求解104. 二叉树的最大深度 给定一个二叉树&#xff0c;找出其最大深度。 二叉树的深度为根节点到最远叶子节点的最长路径…

十、模板匹配

一、概念 模板匹配就是在整个图像区域发现与给定子图像匹配的小块区域。 需要首先给定一个模板图像A&#xff0c;和一个待检测图像B。 在待检测图像B上&#xff0c;从左往右&#xff0c;从上往下计算待检测图像B和模板图像A所重叠的匹配度&#xff0c;匹配度越高则两者相同的可…

基于WF的意见征集4(浅析)

接口项目&#xff1a;IClass&#xff08;项目名称&#xff09; HTHuiFuusing System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Workflow.Runtime;using System.Workflow.Activities;namespace IClass{ /// <summary> /…

那些VisualStudio隐藏的调试功能

VisualStudio是一个强大的调试工具&#xff0c;里面很多隐藏功能少有人问津&#xff0c;但是在特定场景可以节省你很多时间&#xff0c;本文主要介绍一些VisualStudio调试相关的隐藏功能&#xff0c;欢迎大家补充。 运行到指针(Run to cursor) 大多数人用Visual Studio在调试程…

十一、图像二值化

一、二值图像 其实就是把图像转换为只有黑白的两种颜色图像&#xff0c;即像素值非零即一 三角阈值二值化 对一个图像进行操作&#xff0c;获取图像的直方图&#xff0c;找到波峰和波谷进行连线设为线段A&#xff0c;每个点做有关线段A的垂线垂足在线段A上&#xff0c;最后将…

地毯店 如何辨别地毯的好坏?

在实地选购地毯品牌时&#xff0c;许多地方需要引起注意&#xff0c;而且要显得专业&#xff0c;这样才能科学深入地辨别地毯的好坏。比如&#xff0c;辨明拉绞地毯和抽绞地毯两种工艺的打结方法几乎相同&#xff0c;只是变绞形式上有所区别。抽绞的方式较古老&#xff0c;一般…

十二、图像金字塔

一、原理 reduce高斯模糊降采样 expand扩大卷积 PyrDown&#xff1a;降采样 PyrUp&#xff1a;还原 二、高斯金字塔 import cv2 import numpy as np from matplotlib import pyplot as pltdef pyramid(image):level 3temp image.copy()pyramid_image []for i in range(le…

LeetCode 110. 平衡二叉树思考分析

题目 给定一个二叉树&#xff0c;判断它是否是高度平衡的二叉树。 本题中&#xff0c;一棵高度平衡二叉树定义为&#xff1a; 一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过1。 示例 1: 给定二叉树 [3,9,20,null,null,15,7] 3 / 9 20 / 15 7 返回 true 。 示例 2…

十三、图像梯度

一、两种算子 一阶导数—Sobel算子 水平梯度&#xff1a; 垂直梯度&#xff1a; 最终图像梯度&#xff1a; 二阶导数—Laplacian算子 在二阶导数的时候&#xff0c;最大变化处的值为零&#xff0c;即边缘是零值。 常见的拉普拉斯算子&#xff1a;、其所有元素之和为零。…

LeetCode 257. 二叉树的所有路径 思考分析

目录题目思路一&#xff1a;深度递归思路二&#xff1a;广度迭代关于回溯题目 给定一个二叉树&#xff0c;返回所有从根节点到叶子节点的路径。 说明: 叶子节点是指没有子节点的节点。 示例: 输入: 输出: [“1->2->5”, “1->3”] 解释: 所有根节点到叶子节点的路…

十四、Canny边缘提取

一、算法步骤 1&#xff0c;对图像进行GaussianBlur(高斯模糊)消除一些噪声 2&#xff0c;对图像进行灰度转换cvtColor 3&#xff0c;计算梯度Sobel/Scharr 4&#xff0c;非最大信号抑制 5&#xff0c;高低阈值输出二值图像 设定两个阈值T1和T2&#xff0c;凡是高于T2的都保…

图解PCB布线数字地、模拟地、电源地,单点接地抗干扰!

我们在进行pcb布线时总会面临一块板上有两种、三种地的情况&#xff0c;傻瓜式的做法当然是不管三七二十一&#xff0c;只要是地 就整块敷铜了。这种对于低速板或者对干扰不敏感的板子来讲还是没问题的&#xff0c;否则可能导致板子就没法正常工作了。当然若碰到一块板子上有多…

十五、霍夫直线检测

一、自定义 import cv2 import numpy as np from matplotlib import pyplot as pltdef line_detection(image):gray cv2.cvtColor(image,cv2.COLOR_BGR2GRAY)edges cv2.Canny(gray,50,150,apertureSize3)lines cv2.HoughLines(edges,1,np.pi/180,200)for line in lines:rho…

【C++ grammar】对象指针、对象数组、函数参数

目录1、Object Pointer & Dynamic Object1. Accessing Object Members via Pointers2. Creating Dynamic Objects on Heap2、Array of Objects声明方式3、Passing Objects to Functions1、Objects as Function Arguments (对象作为函数参数)2. Objects as Function Return …