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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • navicat12激活码[在线序列号]

    navicat12激活码[在线序列号],https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月18日
    1.1K
  • 常用的DNS列表(亲测可用)

    常用的DNS列表(亲测可用)如果经常遇到这样的问题:浏览器无法打开网站,但是qq、微信是正常使用的,说明DNS有问题。我们知道,默认情况下DNS是自动获取的,通常默认DNS就是路由器,然后由路由器负责向上一级路由查找,但是有时候路由器出现问题就可能造成上面的问题,那么如何一劳永逸的解决上面的问题呢?答案就是修改DNS,在手机、电脑上都可以更改,具体根据机型自行查找资料。以下是一些常用的DNS地址,亲测可用哦~…

    2022年6月9日
    40
  • 100个Python练手小程序[通俗易懂]

    100个Python练手小程序[通俗易懂]100个Python练手小程序,学习python的很好的资料,覆盖了python中的每一部分,可以边学习边练习,更容易掌握python。【程序1】题目:有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?1.程序分析:可填在百位、十位、个位的数字都是1、2、3、4。组成所有的排列后再去      掉不满足条件的排列。2.程序源代码:foriinrange(…

    2022年4月19日
    50
  • linux-kernel(内核)升级,降级与使用

    linux-kernel(内核)升级,降级与使用linux-kernel(内核)升级,降级与使用

    2022年4月24日
    53
  • nginx简单配置多个server

    nginx简单配置多个server1:安装nginx步骤就不说了,自行百度。2:打开nginx的配置文件nginx.conf这是项目1的配置,现在需要再开个同域名不同端口的项目,如下图:注意:LZ一直出现访问不了,折腾了许久,是因为服务器www.pigaudio.com或120.77.223.7只开了默认的80端口,而8088端口并未开,所以只需要登陆你的服务账号添加一个8088即可,比如你的服务器是阿里云购买的,则需要登陆阿里…

    2025年6月16日
    3
  • clion 激活码_在线激活

    (clion 激活码)JetBrains旗下有多款编译器工具(如:IntelliJ、WebStorm、PyCharm等)在各编程领域几乎都占据了垄断地位。建立在开源IntelliJ平台之上,过去15年以来,JetBrains一直在不断发展和完善这个平台。这个平台可以针对您的开发工作流进行微调并且能够提供…

    2022年3月26日
    66

发表回复

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

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