Python OpenCV 形态学操作(腐蚀膨胀,开运算和闭运算)

Python OpenCV 形态学操作(腐蚀膨胀,开运算和闭运算)


过滤器生成

kernel = cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (3, 3)) # 椭圆结构
kernel = cv2.getStructuringElement(cv2.MORPH_CROSS, (3, 3)) # 十字结构
kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (3, 3)) # 矩形结构



腐蚀膨胀开、闭运算

# -*-encoding:utf-8-*-
import pytesseract
from PIL import Image
from PIL import ImageFilter
from PIL import ImageFont
from PIL import ImageDraw
import numpy as np
from PIL import Image

import cv2


def main():
# img = cv2.imread("test001.jpg") #读取图片
# cv2.imshow("1",img) #显示图片
# cv2.waitKey(10000)# 延时10s

# image = Image.open("test002.png")
# img = image.convert('1') # 转化为灰度图

# img.show()

img = cv2.imread("test002.png", 0)
kernel = np.ones((3, 3), np.uint8) # 全为1的过滤数组
print(kernel)

# 腐蚀(去白小点)
img2 = cv2.erode(img, kernel) # 腐蚀
cv2.imshow('canny', img2)
cv2.waitKey(2000)
# cv2.waitKey()

# 膨胀(去黑小点)
img3 = cv2.dilate(img, kernel) # 膨胀
cv2.imshow('canny', img3)
cv2.waitKey(2000)
# cv2.waitKey()

# 先腐蚀后膨胀叫开运算(因为先腐蚀会分开物体,这样容易记住),其作用是:分离物体,消除小区域。
opening = cv2.morphologyEx(img, cv2.MORPH_OPEN, kernel) # 开运算
cv2.imshow('canny', opening)
cv2.waitKey(2000)

# 闭运算则相反:先膨胀后腐蚀(先膨胀会使白色的部分扩张,以至于消除/"闭合"物体里面的小黑洞,所以叫闭运算)
closing = cv2.morphologyEx(img, cv2.MORPH_CLOSE, kernel) # 闭运算
cv2.imshow('canny', closing)
cv2.waitKey(2000)


if __name__ == '__main__':
main()



形态学梯度

# -*-encoding:utf-8-*-
import pytesseract
from PIL import Image
from PIL import ImageFilter
from PIL import ImageFont
from PIL import ImageDraw
import numpy as np
from PIL import Image

import cv2

def main():
# img = cv2.imread("test001.jpg") #读取图片
# cv2.imshow("1",img) #显示图片
# cv2.waitKey(10000)# 延时10s

# image = Image.open("test002.png")
# img = image.convert('1') # 转化为灰度图

# img.show()

img = cv2.imread("test002.png", 0)
kernel = np.ones((3, 3), np.uint8) # 全为1的过滤数组
print(kernel)

# 形态学梯度:膨胀图减去腐蚀图,dilation - erosion,这样会得到物体的轮廓:
gradient = cv2.morphologyEx(img, cv2.MORPH_GRADIENT, kernel) # 形态学梯度
cv2.imshow('canny', gradient)
cv2.waitKey(2000)


if __name__ == '__main__':
main()



顶帽黑帽

# -*-encoding:utf-8-*-
import pytesseract
from PIL import Image
from PIL import ImageFilter
from PIL import ImageFont
from PIL import ImageDraw
import numpy as np
from PIL import Image

import cv2


def main():
# img = cv2.imread("test001.jpg") #读取图片
# cv2.imshow("1",img) #显示图片
# cv2.waitKey(10000)# 延时10s

# image = Image.open("test002.png")
# img = image.convert('1') # 转化为灰度图

# img.show()

img = cv2.imread("test002.png", 0)
kernel = np.ones((3, 3), np.uint8) # 全为1的过滤数组
print(kernel)

# 顶帽:原图减去开运算后的图
tophat = cv2.morphologyEx(img, cv2.MORPH_TOPHAT, kernel)
cv2.imshow('canny', tophat)
cv2.waitKey(2000)

# 黑帽:闭运算后的图减去原图
blackhat = cv2.morphologyEx(img, cv2.MORPH_BLACKHAT, kernel)
cv2.imshow('canny', blackhat)
cv2.waitKey(2000)


if __name__ == '__main__':
main()

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

jie310600

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值