Day28-移动侦测2

我们接续上章写完取绝对值步骤的程序码:

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)

如果想让做完cv2.absdiff之後的结果更加清楚,首先要用之前章节说过的二值化函式cv2.thresholdresult重新赋值一遍:

ret, th = cv2.threshold(result, 15, 255, cv2.THRESH_BINARY)

如果忘记cv2.threshold函式的作用,这里再简单解释一遍:它能够将灰阶图片依照门槛值参数划分成黑白二色,如上面程序码——色阶大於15的元素赋值255,色阶小於15则赋值0。

再执行一次cv2.imshow,印出的结果只会剩下黑白二色,移动的轮廓也更加清晰了。

接着我们可以用OpenCV的膨胀函数cv2.dilate把二值化後的图片进行轮廓加强处理:

dilated = cv2.dilate(th, None, iterations=1)

把二值化和膨胀化之後的图片一起印出来看看,会看到膨胀之後图片的轮廓比二值化图片的轮廓粗大了一些,这就是cv2.dilate的作用。

经过这些後续处理之後,最後的结果和只用cv2.absdiff处理的图片对比起来是不是差了很多!

以後如果在写动态捕捉程序的时候觉得抓到的轮廓太黯淡的话,记得别忘了二值化和膨胀化的步骤哦!


<<:  Day 27. B2E-密码加密

>>:  # 安能取熊掌而舍鱼? 玩转阴影

[Day14] 建立订单交易API_7

更新一下get_iv这支程序 def get_iv(nonce): sha_nonce_value ...

Normals & Lighting

大家好,我是西瓜,你现在看到的是 2021 iThome 铁人赛『如何在网页中绘制 3D 场景?从 ...

疫後数位未来想像

在未来的疫後世界当中,所有的事物都需要靠科技网路来维持,不论是工作还是娱乐都需要网路来帮助,也因此在...

Material UI in React [ Day 16 ] Navigation Menu (下拉框)

Menu 这个套件应用的范围很广,之前讲解过的 Select 也是用这里的 MenuItem 来替换...

[Golang]slice介绍与心智图

slice与array的差异。 类型的差异 array属於值类型,同属於值类型的包含,基础数据类型、...