上章我们在进行图像轮廓增强的处理时,有用到影像膨胀函数cv2.dilate
,但那时候只是稍微带过,读者们可能不太明白cv2.dilate
的参数设置。
本来应该补充说明的,但为了方便大家理解,在介绍cv2.dilate
之前,我们要先来讲讲和膨胀函数的功能相反的函数cv2.erode
。
cv2.erode
是一个影像侵蚀函数,光听名字就知道功能和cv2.dilate
完全相反。cv2.erode
只能用於经过二值化运算的灰阶图片,可起到图片去噪、细化影像和消除毛刺的作用。
而既然需要用到二值化图片,那我们就沿用前两章的程序码:
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)
我们在底下加上一行:
erosion = cv2.erode(th, (3,3), iterations = 1)
cv2.erode
的第一个参数为二值化的影像,所以我们直接带入变数th
。
第二个参数为使用的卷积kernel
——影像侵蚀的原理是透过卷积核心沿着图片滚动并计算元素值,如果卷积核心范围内的元素值都是1(即白色),那麽重新赋予的元素值就保持原来的值。反之如果核心范围内的元素值不全为1,重新赋予的元素值为0(即黑色),这表示卷积核心经过的所有像素如果不是全白都会被腐蚀或侵蚀掉(变为0)。
卷积核心的大小通常设定为奇数,如上面程序码设定的3x3,也可以等差设定上去,如5x5、7x7、9x9,核心越大侵蚀的范围也会越大。
第三个参数为迭代次数,通常预设为1,不用特别去动它。
把erosion
变数印出来看看,会看到轮廓比起原图更加纤细,而且背景的细小毛点被除去了很多!
>>: [DAY 30] 复刻 Rails - View 威力加强版 - 2
话说我们前几天都在聊 API 怎麽做,今天也来小聊一下做 API 时需要使用到的 JSON JSON...
Q1. vim 是什麽? 简单来说, vim 是一种纯文字编辑器,是从 vi 发展出的增强版,而 v...
前情提要 身後传来了声音:「哈罗,我叫艾草,是你的入门引导学姊。」 我回头一看却没看到人。 「这里!...
连续 30 天不中断每天上传一支教学影片,教你如何用 React 加上 Firebase 打造社群...
在资料库的日常使用,会有将schema下的table结构复制到另一schema下,供做测试,或是做移...