我正在对来 self 的网络摄像头的视频流进行 Canny 边缘检测,我一直在尝试寻找减少闪烁的参数。我想知道代表边缘的粗线是否可能无法解决问题。
我现在的代码是
# inspired by hhttps://shahsparx.me/edge-detection-opencv-python-video-image/ttps://shahsparx.me/edge-detection-opencv-python-video-image/
import cv2
import numpy as np
cap = cv2.VideoCapture(0)
while(1):
ret, frame = cap.read()
gray_vid = cv2.cvtColor(frame, cv2.IMREAD_GRAYSCALE)
cv2.imshow('Original',frame)
edged_frame = cv2.Canny(frame,100,200)
cv2.imshow('Edges',edged_frame)
# Quit with 'Esc' key
k= cv2.waitKey(5) & 0xFF
if k==27:
break
cap.release()
cv2.destroyAllWindows()
但它非常闪烁,即许多检测到的边缘出现和消失,特别是边缘模糊的地方,如皱纹、头发、背景元素等。 是否有 opencv 参数可用于视频捕获或可以提供帮助的转换?
最佳答案
我对这个主题没有任何广泛的了解,但我自己一直在使用 opencv 进行一个项目并进行了大量研究。我的知识可能不完整,但这里是我发现的一些东西。
您可以对已应用高斯模糊的图像运行边缘检测以减少噪点,并使用上限和下限阈值来提供帮助。
blur = cv2.GaussianBlur(cv_img, (3, 3), 0)
sigma = np.std(blur)
mean = np.mean(blur)
lower = int(max(0, (mean - sigma)))
upper = int(min(255, (mean + sigma)))
edge = cv2.Canny(blur, lower, upper)
之后,如果仍然存在问题,您可以使用 opencv 腐 eclipse 或膨胀过滤器,以便在必要时加厚或减少边缘。有关腐 eclipse 和膨胀的更多信息,请参见: https://docs.opencv.org/master/d9/d61/tutorial_py_morphological_ops.html
关于python - 如何使用 opencv 对视频进行 Canny 边缘检测以减少闪烁并显示更粗的线条?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53832637/