讲完了影像侵蚀,我们接着来讲影像膨胀。
和cv2.erode
相同,cv2.dilate
只能用於二值化後的图片,所以我们一样把移动侦测的程序码拿来用:
import cv2
import numpy as np
cap = cv2.VideoCapture(0)
img1 = cap.read()[1]
img2 = cap.read()[1]
# 彩色图转灰阶图
gray1 = cv2.cvtColor(t0, cv2.COLOR_BGR2GRAY)
gray2 = cv2.cvtColor(t1, cv2.COLOR_BGR2GRAY)
# 高斯模糊化处理
blur1 = cv2.GaussianBlur(grey1,(5,5),0)
blur2 = cv2.GaussianBlur(grey2,(5,5),0)
result = cv2.absdiff(blur1, blur2)
# 二值化处理
ret, th = cv2.threshold(result, 15, 255, cv2.THRESH_BINARY)
我们在底下加上一行:
dilated = cv2.dilate(th, (3,3), iterations=1)
cv2.dilate
的第一个参数为二值化的影像,所以我们直接带入变数th
。
和cv2.erode
一样,第二个参数同样是卷积核心的大小!这两个函数的差别只在於一个只要核心范围的元素值不全是1,重新赋予的值就全是0(侵蚀),一个只要核心范围的元素值出现1,重新赋予的值就全是1(膨胀)。
第三个参数也和cv2.erode
一样是迭代次数,不需要去改动它。
影像膨胀通常是配合影像侵蚀使用,先用侵蚀函数将图片中的轮廓变细,同时去除多余毛点,之後再用影像膨胀函数将轮廓恢复正常大小,使图片看上去更加清晰。
所以我们可以在移动侦测的程序码做点改动:先把二值化後的图片用cv2.erode
侵蚀一次,再用cv2.dilate
把轮廓膨胀回来,同时做到去除毛点和轮廓清晰化。
以上就是形态学的两种影像处理函数了,随着本章的结束,我的三十天铁人赛也宣告完结。
经过这次比赛的经验,我对OpenCV
的应用有了更为深入的了解,希望这三十天的学习纪录也能替後来的人起到一些帮助,如果刚开始学影像处理的初学者们能在我的参赛文章里找到有用的知识,那我也会很高兴的。
谢谢观看。
<<: 【终章】 Tailwind VS Bootstrap5 谁能称霸?
前一天我们讨论了图片的颜色,今天就来讨论一下图片的频率和一些简单的特徵处理技巧 图片也有频率? 在处...
古语有云:「岁有凶穰;故谷有贵贱;令有缓急;故物有轻重。」旨在告诉後人,做任何事情,一定要先搞清楚状...
机器学习三大步骤 定义一个模型(model) 从模型里挑出好的函式(function) 经由演算法找...
如标题,这篇想教大家如何修改phpMyAdmin的帐号密码 因为phpMyAdmin的预设是不用输入...
剩下最後两种实境了,就一次介绍完吧! CR(影像实境):是Magic Leap公司曾提出的概念,CR...