openCV 学习笔记3 图像的形态学

1.图像的二值化

所谓阈值处理,就是给定一个阈值,当像素值比指定阈值大或小时做相关的操作。对应的API为:cv2.threshold(src,thresh,maxval,type,dst=None),几种type的作用:

cv2.THRESH_BINARY:若像素值大于阈值,则置为maxval;否则置0
cv2.THRESH_BINARY_INV:THRESH_BINARY的反转
cv2.THRESH_TRUNC:若像素值大于阈值,则置为阈值;否则不变
cv2.THRESH_TOZERO:小于阈值的部分置为0;其他不变
cv2.THRESH_TOZERO_INV:THRESH_TOZERO的反转
 

import cv2
import numpy
img = cv2.imread('dog.jpg')
img_gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)

#图像二值化,返回两个值,小于200的数值为0,大于200的数值为255
ret,img_binary = cv2.threshold(img_gray, 200,255, cv2.THRESH_BINARY)

cv2.imshow('binary',img_binary)
cv2.imshow('gray',img_gray)
img_gray
img_binary

2.腐蚀操作

        如右图,原图像和一个5X5的卷积核进行卷积,当卷积核内所有像素均为黑色像素时,卷积后的图像的中心点像素才为黑像素。图像经过腐蚀之后,边缘像素向内收缩。                                                                                    erode(img,ksize,iterations = 1)      iterations表示腐蚀的次数

kernel = np.ones((5,5),np.uint8)
img_erode = cv2.erode(img,kernel,iterations=3)

3.膨胀操作

        腐蚀对应的是膨胀,只要卷积核中间点像素不为0,则3x3的卷积核上的所有像素都不为0.

膨胀

 

 

#膨胀
kernel = np.ones((5,5),np.uint8)
img_dilate = cv2.dilate(img,kernel,iterations=1)

腐蚀和膨胀如果用的是白底黑字,则效果刚好相反

开运算:腐蚀+膨胀(顺序不能搞反)!!!!

开运算

         图像经过开运算后,胡椒噪点被抹去。

#开运算
img_morphology = cv2.morphologyEx(img,cv2.MORPH_OPEN,kernel)

闭运算:膨胀+腐蚀(顺序不能搞反)!!!!

         闭运算是消除图像内的噪点       

 4.形态图梯度

        原图-腐蚀,得到的是图像的边缘,就像是用笔把边缘重新描摹了一下,而中间的像素被删掉了

形态学梯度

 

5.顶帽运算

        原图 - 开运算

顶帽运算

 去除大的白块,留下小的白块

#顶帽运算
img_hat = cv2.morphologyEx(img,cv2.MORPH_TOPHAT,kernel)

6.黑帽运算

        原图 - 闭运算

黑帽运算

保留图片内部的噪点 

 

#黑帽运算
img_blackhat = cv2.morphologyEx(img,cv2.MORPH_BLACKHAT,kernel)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值