opencv滤波、图像形运算、Sober算子

opencv滤波、图像形运算、Sober算子1.opencv中滤波操作:ksize必须是奇数1.均值操作:选定图像上的行数和列数,求出总和,除以总个数,然后将这个数放到这个选定区的中间区域中。数学表达式:4上的值=(5+6+6+7+4+…..+55)/25;函数:result=cv2.blur(src,ksize)importcv2o=cv2.imread(‘D:\cc1\lenacolor.png’)#进行图片的读取s1=cv2.blur(o,(10,10))#进行均值操作cv2.imshow(‘oringle’,o)#进行

大家好,又见面了,我是你们的朋友全栈君。

1.opencv中滤波操作:ksize必须是奇数

1.均值操作:选定图像上的行数和列数,求出总和,除以总个数,然后将这个数放到这个选定区的中间区域中。数学表达式:4上的值=(5+6+6+7+4+.....+55)/25;
函数:result=cv2.blur(src,ksize)

在这里插入图片描述

import  cv2
o=cv2.imread('D:\cc1\lenacolor.png')#进行图片的读取
s1=cv2.blur(o,(10,10))#进行均值操作
cv2.imshow('oringle',o)#进行图片显示
cv2.imshow("result",s1)
cv2.waitKey()
cv2.destroyAllWindows()

结果为
在这里插入图片描述

2方框滤波:
函数:result=cv2.boxFliter(src,ddepth,ksize,normalize),在这个用法中ddpeth一般设置为-1,
计算方法:

在这里插入图片描述

import cv2
o=cv2.imread('D:\cc1\lenacolor.png')
s1=cv2.boxFilter(o,-1,(4,4),normalize=0)#这种情况容易溢出
s2=cv2.boxFilter(o,-1,(4,4),normalize=1)#相当于均值滤波
cv2.imshow('oringinal',o)
cv2.imshow('result_0',s1)
cv2.imshow('result_1',s2)
cv2.waitKey()
cv2.destroyAllWindows()

结果为

在这里插入图片描述

 3.高斯滤波:让临近的像素具有更高的重要度,对周围像素计算加权平均值,较近的像素具有较大的权重值。
 函数:result=cv2.Gaussian(src,ksize,sigmaX)
 其中sigmaX:X 方向方差,控制权重
 	sigmaX=0时,sigma=0.3*(ksize-1)*0.5-1)+0.8
import  cv2
o=cv2.imread('D:\cc1\lenacolor.png')
s2=cv2.GaussianBlur(o,(5,5),sigmaX=0,sigmaY=0)#x方向和y方向的权重
s3=cv2.GaussianBlur(o,(5,5),sigmaX=0)#x方向权重
cv2.imshow('original',o)
cv2.imshow('xy',s2)
cv2.imshow('x',s3)
cv2.waitKey()
cv2.destroyAllWindows()

结果为

在这里插入图片描述

4.中值滤波:让ksize中的数据按照像素大小进行排列,取排序像素中间的值作为中值滤波的像素值:
函数:cv2.mediablur(src,ksize)
import cv2
o=cv2.imread('D:\cc1\lenacolor.png')
s1=cv2.medianBlur(o,11)#这个11代表11行11列
cv2.imshow('oringial',o)
cv2.imshow('result',s1)
cv2.waitKey()
cv2.destroyAllWindows()

结果为
在这里插入图片描述## 2.opencv中形态处理:
1. 腐蚀操作:被操作的对象必须是二值图像;两个操作对象:一个是原始图像,另一个是卷积核;操作过程:被扫描到的原始图像中的像素点,只有当卷积核扫描图像中所有元素值均为1时,其值才为1,否则值为0;函数:result=cv2.erode(src,kernerl,iternation)
在这里插入图片描述

import cv2
import numpy as np
o=cv2.imread('D:/cc1/erode.bmp',cv2.IMREAD_UNCHANGED)
k1=np.ones((4,4),np.uint8)#创建一个4行4列的二维数组
s1=cv2.erode(o,k1)#默认进行一次迭代,
s2=cv2.erode(o,k1,iterations=5)#进行5次迭代
cv2.imshow('original',o)#显示原始图像
cv2.imshow('iter_1',s1)#显示迭代一次图像
cv2.imshow('iter_5',s2)#显示迭代5次图像
cv2.waitKey()
cv2.destroyAllWindows()

结果为
在这里插入图片描述
通过结果我们可以发现随着迭代次数的增多,图像噪声被清除,但是图像大小越来越小
2.膨胀::被操作的对象必须是二值图像;两个操作对象:一个是原始图像,另一个是卷积核;操作过程:被扫描到的原始图像中的像素点,只有当卷积核扫描图像中所有元素值均为0时,其值才为1,否则值为1;函数:result=cv2.dilate(src,kernerl,iternation)
在这里插入图片描述

import cv2
import numpy as np
o=cv2.imread('D:/cc1/dilation.bmp',cv2.IMREAD_UNCHANGED)#读取过程中不改变图片的类型
k1=np.ones((5,5),np.uint8)
s1=cv2.dilate(o,k1)
s2=cv2.dilate(o,k1,iterations=8)
cv2.imshow('oringinal',o)
cv2.imshow('iter_1',s1)
cv2.imshow('iter_9',s2)
cv2.waitKey()
cv2.destroyAllWindows()

结果为
在这里插入图片描述
3.开运算:先对图像进行腐蚀操作,然后再进行膨胀操作,这样不仅可以去除噪声,并且可以保持图形形状不改变。基本公式:开运算(image)=膨胀(腐蚀(image));函数:result=cv2.morphologyEx(src,cv2.MORPH_OPEN,kernel)其中kernel是卷积核。主要使用于图像外面有噪声

import cv2
import numpy as np
o=cv2.imread('D:/cc1/opening.bmp',cv2.IMREAD_UNCHANGED)
k1=np.ones((4,4),np.uint8)#创建卷积核
s1=cv2.morphologyEx(o,cv2.MORPH_OPEN,k1)#迭代一次
s2=cv2.morphologyEx(o,cv2.MORPH_OPEN,k1,iterations=8)#迭代8次
cv2.imshow('oringinal',o)
cv2.imshow('iter_1',s1)
cv2.imshow('iter_2',s2)
cv2.waitKey()
cv2.destroyAllWindows()

在这里插入图片描述
4闭运算:先进性膨胀操作,在进行腐蚀操作,主要使用于图像内容有噪声:函数表达式:result=cv2.morphologyEx(src,cv2.MORPH_CLOSE,kernel)其中kernel是卷积核

import cv2
import numpy as np
o=cv2.imread('D:/cc1/closing.bmp',cv2.IMREAD_UNCHANGED)#读取图片,并保持图片格式不改变
k1=np.ones((4,4),np.uint8)#创建一个卷积核
s1=cv2.morphologyEx(o,cv2.MORPH_CLOSE,k1)#进行一次迭代闭运算
s2=cv2.morphologyEx(o,cv2.MORPH_CLOSE,k1,iterations=5)#进行5次迭代闭运算
cv2.imshow('oringinal',o)
cv2.imshow('iter_1',s1)
cv2.imshow('iter_5',s2)
cv2.waitKey()
cv2.destroyAllWindows()

在这里插入图片描述
5.梯度运算:使用原图像-腐蚀后的图像;函数表达式:result=cv2.morphologyEx(src,cv2.MORPH_Gradient,kernel)其中kernel是卷积核

import cv2
import numpy as np
o=cv2.imread('D:/cc1/gradient.bmp',cv2.IMREAD_UNCHANGED)
k1=np.ones((4,4),np.uint8)
s1=cv2.morphologyEx(o,cv2.MORPH_GRADIENT,k1)
s2=cv2.morphologyEx(o,cv2.MORPH_GRADIENT,k1,iterations=5)
cv2.imshow('original',o)
cv2.imshow('iter_1',s1)
cv2.imshow('iter_8',s2)
cv2.waitKey()
cv2.destroyAllWindows()

结果为
在这里插入图片描述
6.图像礼帽操作:原始图像-开运运算,得到的就是噪声图像;result=cv2.morphologyEx(src,cv2.MORPH_TOPHAT,kernel)其中kernel是卷积核。

import cv2
import numpy as np
o=cv2.imread('D:/cc1/tophat.bmp',cv2.IMREAD_UNCHANGED)
k1=np.ones((5,5),np.uint8)
s1=cv2.morphologyEx(o,cv2.MORPH_TOPHAT,k1)
s2=cv2.morphologyEx(o,cv2.MORPH_TOPHAT,k1,iterations=8)
cv2.imshow('original',o)
cv2.imshow('iter_1',s1)
cv2.imshow('iter_5',s2)
cv2.waitKey()
cv2.destroyAllWindows()

在这里插入图片描述

  1. 黑帽操作:闭运算-原始图像:即得到内部的噪声;result=cv2.morphologyEx(src,cv2.MORPH_BLACKHAT,kernel)其中kernel是卷积核。
import cv2
import numpy as np
o=cv2.imread('D:/cc1/blackhat.bmp',cv2.IMREAD_UNCHANGED)
k1=np.ones((4,4),np.uint8)
s1=cv2.morphologyEx(o,cv2.MORPH_BLACKHAT,k1)
s2=cv2.morphologyEx(o,cv2.MORPH_BLACKHAT,k1,iterations=5)
cv2.imshow('original',o)
cv2.imshow('iter_1',s1)
cv2.imshow('iter_5',s2)
cv2.waitKey()
cv2.destroyAllWindows()

结果为
在这里插入图片描述

Sober算子:

1.Soberx,y轴计算规则:

在这里插入图片描述
2.Sober在二维图像上的应用:

import  cv2
import numpy as np
o=cv2.imread('D:/cc1/sobel.bmp',cv2.IMREAD_UNCHANGED)
s2_x=cv2.Sobel(o,cv2.CV_64F,dx=1,dy=0)#sober中x计算,如计算赋值则不显示
s2_y=cv2.Sobel(o,cv2.CV_64F,dx=0,dy=1)#sobery计算
s2_xycon=cv2.Sobel(o,cv2.CV_64F,dx=1,dy=1)#soberx,y计算
s2_x=cv2.convertScaleAbs(s2_x)#把sober计算的赋值转换成正值,-1不会转换,cv2.CV_64F会转换
s2_y=cv2.convertScaleAbs(s2_y)
s2_xy=cv2.addWeighted(s2_x,0.5,s2_y,0.5,0)#
cv2.imshow('original',o)
cv2.imshow('s2_x',s2_x)
cv2.imshow('s2_y',s2_y)
cv2.imshow('s2_xy',s2_xy)
cv2.imshow('s2_xycon',s2_xycon)
cv2.waitKey()
cv2.destroyAllWindows()

在这里插入图片描述
在这里插入图片描述
3.Sober在彩色图像的应用:

import  cv2
import numpy as np
o=cv2.imread('D:/cc1/lenacolor.png',cv2.IMREAD_UNCHANGED)
s2_x=cv2.Sobel(o,cv2.CV_64F,dx=1,dy=0)
s2_y=cv2.Sobel(o,cv2.CV_64F,dx=0,dy=1)
s2_xycon=cv2.Sobel(o,cv2.CV_64F,dx=1,dy=1)
s2_x=cv2.convertScaleAbs(s2_x)
s2_y=cv2.convertScaleAbs(s2_y)
s2_xy=cv2.addWeighted(s2_x,0.5,s2_y,0.5,0)
cv2.imshow('original',o)
cv2.imshow('s2_x',s2_x)
cv2.imshow('s2_y',s2_y)
cv2.imshow('s2_xy',s2_xy)
cv2.imshow('s2_xycon',s2_xycon)
cv2.waitKey()
cv2.destroyAllWindows()

所有程序连接:
链接:https://pan.baidu.com/s/1vnluuTe83RpNLmf7X8fsfg
提取码:aspw
复制这段内容后打开百度网盘手机App,操作更方便哦
注:本文根据李大洋老师所讲内容自己进行整理。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/158954.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • svm 算法通俗介绍

    svm 算法通俗介绍http://blog.csdn.net/v_july_v/article/details/7624837作者:July、pluskid;致谢:白石、JerryLead出处:结构之法算法之道blog

    2022年8月1日
    1
  • ps磨皮插件portraiture「建议收藏」

    ps磨皮插件portraiture「建议收藏」相信大家在使用photoshop的时候经常会配合插件来进行修图,而ps磨皮插件portraiture也是大多数人的必备插件,因为当你需要处理人像照片的话,那么磨皮将是必不可少的一个步骤,而该插件正是一个功能强大的磨皮滤镜插件,不仅为用户们提供了强大的磨皮效果,还使用起来十分的简单,无需繁琐的使用步骤,只需要简简单单的设置下磨皮参数再随意的调整下即可快速的帮助用户进行磨皮处理啦,非常方便,所以如果你要用ps的话怎么可以缺少这款ps磨皮插件呢?另外,使用这款插件的时候,你会发现它直接为用户们提供了一个单独的面板

    2022年7月22日
    22
  • Vue.js学习的第一天

    Vue.js学习的第一天官网文档地址:传送门一、Vue介绍:1.Vue.js是什么?作者:2014年2月,尤雨溪曾就职于GoogleCreativeLabs和MeteorDevelopmentGroup。Vue(读音/vjuː/,类似于view)是一套用于构建用户界面的渐进式框架。与其它大型框架不同的是,Vue被设计为可以自底向上逐层应用。Vue的核心库只关注视图层,不仅易于上手,还便于与第三方库或既有项目整合。另一方面,当与现代化的工具链以及各种支持类库结合使用时,Vu..

    2022年4月9日
    46
  • 嵌入式C语言面试题_c语言基础面试题

    嵌入式C语言面试题_c语言基础面试题预处理器(Preprocessor)1 . 用预处理指令#define 声明一个常数,用以表明1年中有多少秒(忽略闰年问题)         #define SECONDS_PER_YEAR (60 * 60 * 24 * 365)UL我在这想看到几件事情:1) #define 语法的基本知识(例如:不能以分号结束,括号的使用,等等)2)懂得预处理器将为你计算常数表达式的值,因此,直接写出你是如何…

    2022年8月27日
    5
  • 【8大编程语言的适用领域】先别着急选语言学编程,先看它们能干嘛「建议收藏」

    【8大编程语言的适用领域】先别着急选语言学编程,先看它们能干嘛「建议收藏」你学的编程语言真的是你想要的吗

    2022年5月23日
    33
  • 显示隐藏高德地图点标注的文本标签「建议收藏」

    显示隐藏高德地图点标注的文本标签「建议收藏」@[显示隐藏高德地图点标注的文本标签]效果如图欢迎使用Markdown编辑器你好!这是你第一次使用Markdown编辑器所展示的欢迎页。如果你想学习如何使用Markdown编辑器,可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。新的改变我们对Markdown编辑器进行了一些功能拓展与语法支持,除了标准的Markdown编辑器功能,我们增加了如下几点新功能,帮助你…

    2022年5月14日
    112

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号