Opencv的形态学操作和基础滤波

开闭运算

开运算 内容是先腐蚀后膨胀 这样的先腐蚀了周边的噪点,然后再把主体膨胀出来,这样就得到了去除噪点的功能 

闭运算 内容是先膨胀后腐蚀 这样的先膨胀了主题的内容,再腐蚀掉主体周边,这样就达到了一个填充了主题空洞的效果

import  cv2 as cv
import  math
import numpy as np
import  matplotlib.pyplot as plt




path=r"F:\kaibi.png"
img=cv.imread(path,0)
rows,cols=img.shape[:2]

cv.imshow("1",img)

k=np.ones((20,20),np.uint8)
cvopen=cv.morphologyEx(img,cv.MORPH_OPEN,k)
cvclose=cv.morphologyEx(img,cv.MORPH_CLOSE,k)
cv.imshow("2",cvopen)

cv.imshow("3",cvclose)



# h=cv.calcHist([img],[0],None,[256],[0,256])
# plt.figure(figsize=(10,6),dpi=100)
# plt.plot(h)
# plt.grid()
# plt.show()


cv.waitKey(0)



cv.destroyAllWindows()

经过实验 总结出 开运算还具有分离两块的连接,和上下边缘轮廓的效果,而闭运算可以弥补物体的空洞和缺口,还有一些棱角变得更圆滑填充。        

                                                   这个可以用来做此实验

礼帽和黑帽

简单总结就是 礼貌就是开运算要减去的东西是哪些

                       黑帽就是闭运算要加哪些

import  cv2 as cv
import  math
import numpy as np
import  matplotlib.pyplot as plt




path=r"F:\kaibi.png"
img=cv.imread(path,0)
rows,cols=img.shape[:2]

cv.imshow("1",img)

k=np.ones((20,20),np.uint8)
cvopen=cv.morphologyEx(img,cv.MORPH_OPEN,k)
cvclose=cv.morphologyEx(img,cv.MORPH_CLOSE,k)

limao=cv.morphologyEx(img,cv.MORPH_TOPHAT,k)
heimao=cv.morphologyEx(img,cv.MORPH_BLACKHAT,k)

cv.imshow("2",limao)
cv.imshow("3",heimao)

椒盐噪声 和 高斯噪声

 椒盐噪声 就是像撒盐一样 噪声都是一些白点 在图像中如同

 这样就是椒盐噪声

高斯噪声 就是符合正太分布一些噪声,灰度不只有黑白,分布在图像中

均值滤波

 用1/9的3x3均值卷积去滤波,用周围的一起均值代替中心目标,这样会使一些细节模糊,可以去除噪声但是代价是让图片模糊,使用的卷积核越大,越模糊但去噪声越好。

import  cv2 as cv
import  math
import numpy as np
import  matplotlib.pyplot as plt




path=r"F:\jiaoyan.webp"
img=cv.imread(path,0)
rows,cols=img.shape[:2]

cv.imshow("1",img)


b=cv.blur(img,(5,5))
cv.imshow("2",b)


# h=cv.calcHist([img],[0],None,[256],[0,256])
# plt.figure(figsize=(10,6),dpi=100)
# plt.plot(h)
# plt.grid()
# plt.show()


cv.waitKey(0)



cv.destroyAllWindows()

高斯滤波

相比与均值滤波,这里的高斯滤波赋予了每个地方的权重,中心权重越高,旁边低一点,这样模拟高斯三维的分布形状,都有不同的值去做卷积。

import  cv2 as cv
import  math
import numpy as np
import  matplotlib.pyplot as plt




path=r"F:\jiaoyan.webp"
img=cv.imread(path,0)
rows,cols=img.shape[:2]

cv.imshow("1",img)


b=cv.GaussianBlur(img,(3,3),1)#此处的1指的是x方向的平方差

cv.imshow("2",b)


# h=cv.calcHist([img],[0],None,[256],[0,256])
# plt.figure(figsize=(10,6),dpi=100)
# plt.plot(h)
# plt.grid()
# plt.show()


cv.waitKey(0)



cv.destroyAllWindows()

 中值滤波

这种是利用邻域的中值来代替中心的像素,这样就很好去除一些噪声,特别是椒盐噪声使用这个,也不会影响图像的模糊度。

import  cv2 as cv
import  math
import numpy as np
import  matplotlib.pyplot as plt




path=r"F:\jiaoyan.webp"
img=cv.imread(path,0)
rows,cols=img.shape[:2]

cv.imshow("1",img)


b=cv.medianBlur(img,5)

cv.imshow("2",b)


# h=cv.calcHist([img],[0],None,[256],[0,256])
# plt.figure(figsize=(10,6),dpi=100)
# plt.plot(h)
# plt.grid()
# plt.show()


cv.waitKey(0)

直方图显示

把图像的一些像素分布统计出来,把灰度的数量分布统计出来。

import  cv2 as cv
import  math
import numpy as np
import  matplotlib.pyplot as plt




path=r"F:\jiaoyan.webp"
img=cv.imread(path,0)
rows,cols=img.shape[:2]

cv.imshow("1",img)




h=cv.calcHist([img],[0],None,[256],[0,256])
plt.figure(figsize=(10,6),dpi=100)
plt.plot(h)
plt.grid()
plt.show()


cv.waitKey(0)



cv.destroyAllWindows()

 函数的参数就是 照片,通道,掩膜,通道组数,像素宽度。

掩膜的应用

提取图像中的感兴趣区域,相当截图出我想要的区域。

import  cv2 as cv
import  math
import numpy as np
import  matplotlib.pyplot as plt

path=r"F:\jiaoyan.webp"
img=cv.imread(path,0)
rows,cols=img.shape[:2]
cv.imshow("1",img)
mask=np.zeros(img.shape[:2],np.uint8)
mask[int(rows/4):int(rows/2),int(cols/4):int(cols/2)] = 255

mask_img=cv.bitwise_and(img,img,mask=mask)

cv.imshow("3",mask_img)

cv.imshow("2",mask)


cv.waitKey(0)



cv.destroyAllWindows()

这里的mask里面必须是整型,不然会报错。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值