我们接续上章写完取绝对值步骤的程序码:
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.threshold
把result
重新赋值一遍:
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
处理的图片对比起来是不是差了很多!
以後如果在写动态捕捉程序的时候觉得抓到的轮廓太黯淡的话,记得别忘了二值化和膨胀化的步骤哦!
更新一下get_iv这支程序 def get_iv(nonce): sha_nonce_value ...
大家好,我是西瓜,你现在看到的是 2021 iThome 铁人赛『如何在网页中绘制 3D 场景?从 ...
在未来的疫後世界当中,所有的事物都需要靠科技网路来维持,不论是工作还是娱乐都需要网路来帮助,也因此在...
Menu 这个套件应用的范围很广,之前讲解过的 Select 也是用这里的 MenuItem 来替换...
slice与array的差异。 类型的差异 array属於值类型,同属於值类型的包含,基础数据类型、...