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


相关推荐

  • myeclipse8.5注册码怎么用_java生成不重复验证码

    myeclipse8.5注册码怎么用_java生成不重复验证码注册码:用户名:myeclipse5.5注册码:zLR7ZL-655444-60536056302480798注册机代码:importjava.io.BufferedReader;importjava.io.IOException;importjava.io.InputStreamReader;importjava.io.PrintStream;

    2022年9月30日
    2
  • 三种非对称加密算法总结

    三种非对称加密算法总结1、DH非对称算法的基石仅能用于密钥分配,不能用于加解密数据,一般加密数据用AES密钥长度:512~1024中的64的整数倍双方各有自己的密钥对2、RSA最经典的非对称加密算法也可认为是使用最多的非对称加密算法能用于密钥分配,也能用于加解密数据(“私钥加密,公钥解密”和“公钥加密,私钥解密”)密钥长度:512~65536(64的整数倍)只有发送方有一个密钥对…

    2025年8月4日
    0
  • pycharm在linux系统汉化,PyCharm中文乱码问题的解决

    pycharm在linux系统汉化,PyCharm中文乱码问题的解决这几天一直挺困扰的是使用PyCharm之后一直对中文的乱码,即使添加了很多别人说的类似于#coding:utf-8的语句但是还是报错,让我抓狂,但是今天终于找到了解决的办法,还真的是让人很高兴啊,哈哈哈这是报错的窗口:典型的无法识别中文,在头添加#coding:utf-8之后还是报错的状态,所以就用了下面的方法,首先,我用的是PyCharm的4.5.3最新的版本进入设置界面,找到Editor–…

    2022年8月25日
    7
  • amos路径分析结果怎么看_路径分析图怎么解读

    amos路径分析结果怎么看_路径分析图怎么解读基础准备草堂君在前面几篇文章中,介绍了AMOS软件的操作、分析原理、结构方程模型和各种拟合指标含义等内容,大家可以点击下面的文章链接回顾,也可以从公众号导航栏获取AMOS分析技术(导航页)回顾:AMOS分析技术:软件安装及菜单功能介绍;这次是视频教程AMOS分析技术:结构方程模型的拟合度评价指标AMOS分析技术:模型整体拟合度指标AMOS分析

    2022年8月24日
    11
  • 初识js中的闭包_Js闭包中变量理解

    初识js中的闭包_Js闭包中变量理解今天看了关于js闭包方面的文章,还是有些云里雾里,对于一个菜鸟来说,学习闭包确实有一定的难度,不说别的,能够在网上找到一篇优秀的是那样的不易。当然之所以闭包难理解,个人觉得是基础知识掌握的不牢,因为

    2022年8月6日
    12
  • python 3.6安装cPickle

    python 3.6安装cPicklepython36找不到pickle这个包,直接使用import_pickleascPickle即可,亲测可用https://blog.csdn.net/bailixuance/article/details/850544591、在python2.X中,需要安装cPickle,2、在python3.X中,这个包已被别的包替换,使用以下语句即可:import_picklea…

    2022年6月16日
    118

发表回复

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

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