python-opencv 形态学处理图像

形态学处理图像,其实就是以表示形状的结构元去改变原图,这里的结构元就是内核矩阵(0和1的矩阵)

import cv2 as cv 
import numpy as np 

img = cv.imread("./shangyi.jpg",cv.IMREAD_GRAYSCALE)

#侵蚀 (应用与灰度图)
#在5*5的区域像素中有像素值不为1的,则这个区域全部像素为0
#iterations=3表示进行3次侵蚀循环
kernel = np.ones((5,5),np.uint8)
erosion = cv.erode(img,kernel,iterations=3)

#扩张 (应用与灰度图)
#在5*5的区域像素中有像素值不为0的,则这个区域全部像素为1
#iterations=3表示进行3次侵蚀循环
dilation = cv.dilate(img,kernel,iterations=3)

#开运算 先侵蚀再扩张
#作用:侵蚀掉黑色背景中的白色噪点,再通过扩张恢复原图
#从视觉上看仿佛将原本连接的物体“分开”
opening = cv.morphologyEx(img,cv.MORPH_OPEN,kernel,iterations=3)

#闭运算 先扩张再侵蚀
#作用:扩张掉白色图形中的黑色噪点,再通过侵蚀恢复原图
#从视觉上看仿佛将原本分开的部分“闭合”
closing = cv.morphologyEx(img,cv.MORPH_CLOSE,kernel,iterations=3)

#形态学梯度 图像保留轮廓部分
gradient = cv.morphologyEx(img, cv.MORPH_GRADIENT, kernel,iterations=3)

#顶帽 原图像与开运算的差  
tophat = cv.morphologyEx(img, cv.MORPH_TOPHAT, kernel,iterations=3)

#黑帽 原图像与闭运算的差  
blackhat = cv.morphologyEx(img, cv.MORPH_BLACKHAT, kernel,iterations=3)

#改变内核形状=>改变矩阵值的分布
#矩形
rect = cv.getStructuringElement(cv.MORPH_RECT,(5,5))
#椭圆
ellipse = cv.getStructuringElement(cv.MORPH_ELLIPSE,(5,5))
#十字
cross = cv.getStructuringElement(cv.MORPH_CROSS,(5,5))
print(rect,ellipse,cross)


cv.namedWindow('img',cv.WINDOW_NORMAL)
cv.resizeWindow('img',200,100)
cv.imshow('img',img)
cv.waitKey(0)
cv.imshow('img',erosion)
cv.waitKey(0)
cv.imshow('img',dilation)
cv.waitKey(0)
cv.imshow('img',opening)
cv.waitKey(0)
cv.imshow('img',closing)
cv.waitKey(0)
cv.imshow('img',gradient)
cv.waitKey(0)
cv.imshow('img',tophat)
cv.waitKey(0)
cv.imshow('img',blackhat)
cv.waitKey(0)
cv.destroyAllWindows()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值