如何使用 OpenCV 检测视频输入静态

问题描述 投票:0回答:1

我的目标是检测视频输入流中的静态并剪切录制内容,因为它是无关紧要的镜头。

有没有一种使用 OpenCV 检测静态的简单方法?您知道如何使用 OpenCV 检测实时视频输入中的所有不同静态吗?

1m 2m

python opencv video-processing
1个回答
0
投票

那是高频噪声。您需要一个对其敏感的过滤器。

局部最大值和局部最小值之间的差异反应良好。对于你的第一张照片:

localmax = cv.dilate(pic, None, iterations=k)
localmin = cv.erode(pic, None, iterations=k)

localmax, pic, localmin

enter image description here

每张图片的差异:

diff = cv.subtract(localmax, localmin)

enter image description here enter image description here

你看,第一个反应压倒性的。第二个也对图像的大部分区域产生反应,但不太强烈。

现在您可以计算这些差异的直方图以及累积分布:

hist, bins = np.histogram(diff.flatten(), 256, [0, 256])
cdf = hist[::-1].cumsum()[::-1]
cdf_normalized = cdf * hist.max() / cdf.max()

plt.xlim([256, 0])
plt.plot(cdf_normalized, color='r')
plt.hist(diff.flatten(), 256, [0, 256], color='b')
plt.show()

enter image description here enter image description here

你看,如果你对差异设置一些阈值,你可以知道图片中有多少部分(至少)有那么大的噪音。在第一张图片中,即使阈值很高,仍然占据了大部分区域。显然很吵。在第二张图中,只有一小部分非常嘈杂(阈值较高),但大部分至少有一点噪声(阈值较低)。

您可以决定差异阈值的位置以及允许图片的多少部分高于阈值。

此方法还会对图像中的边缘和其他“内容”做出反应。这是不可避免的。

人们可以想出一种更可靠地基于统计的“替代”方法。第二张图片的噪声表明该图片来自模拟信号,其中包含一些低频噪声。因此,同一行中的像素相关(左/右邻居),而跨行的像素(顶部和底部的邻居)几乎不相关。

© www.soinside.com 2019 - 2024. All rights reserved.