gpt4 book ai didi

python - OpenCV检测python中的运动

转载 作者:太空狗 更新时间:2023-10-29 21:45:27 25 4
gpt4 key购买 nike

我的目标是检测 IP 摄像机流中特定区域的运动。我设法编写了工作代码,但这是基于我个人的理解。

import cv2
import numpy as np
import os
import time
import datetime
import urllib
import pynotify

stream=urllib.urlopen('http://user:pass@192.168.198.120/video.mjpg')
bytes=''
fgbg = cv2.createBackgroundSubtractorMOG2()

while True:
bytes+=stream.read(16384)
a = bytes.find('\xff\xd8')
b = bytes.find('\xff\xd9')
if a!=-1 and b!=-1:
jpg = bytes[a:b+2]
bytes= bytes[b+2:]
img = cv2.imdecode(np.fromstring(jpg, dtype=np.uint8),cv2.IMREAD_COLOR)
rows,cols,c = img.shape
mask = np.zeros(img.shape, dtype=np.uint8)
roi_corners = np.array([[(940,220),(1080,240), (1080,310), (940,290)]], dtype=np.int32)
channel_count = img.shape[2]
ignore_mask_color = (255,)*channel_count
cv2.fillPoly(mask, roi_corners, ignore_mask_color)
masked_image = cv2.bitwise_and(img, mask)

fgmask = fgbg.apply(masked_image)
iii = fgmask[220:310,940:1080]

hist,bins = np.histogram(iii.ravel(),256,[0,256])

black, white, cnt1, cnt2 = 0,0,0,0


for i in range(0,127):
black += hist[i]
cnt1+=1
bl = float(black / cnt1)

for i in range(128,256):
white += hist[i]
cnt2+=1
wh = float(white / cnt2)

finalResult = ((bl+1) / (wh+1))/10

if finalResult < 1.0:
pynotify.init("cv2alert")
notice = pynotify.Notification('Alert', 'Alert text')
try:
notice.show()
except gio.Error:
print "Error"

这段代码有效,但由于我不太了解直方图,所以我没有设法直接获取值,但有一些“hacks”,比如直方图的左侧是黑色,右侧是白色, black/white 给出了我想要的结果。我知道这不太正确,但当没有人进入 ROI 时,它会给出 4-9 的结果,而当有人输入此 ROI 时,它会给出 0.5-2.0 的结果。

我的问题是:有没有其他方法来读取直方图和比较数据,或者其他方法?阅读文档对我没有帮助。

最佳答案

检测移动的一种方法是使用 cv2.accumulateWeighted 保持场景的运行平均值.然后,使用 cv2.absdiff 将每个新帧与平均值进行比较获取指示场景变化的图像。

我在 a video processing project 中正是这样做的我的。查看文件 diffavg1.py 中的主循环我在其中运行累加器并执行差异。

(该项目的研究是利用多核CPU架构实现实时视频处理,所以后来的版本diffavg2.pydiffavg3.pydiffavg4.py 是性能逐渐提高的实现,但底层的 accumulate-diff 算法是相同的。)

关于python - OpenCV检测python中的运动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40514508/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com