gpt4 book ai didi

python - 仅检查 OpenCV 中视频源的特定部分

转载 作者:太空宇宙 更新时间:2023-11-03 21:23:51 25 4
gpt4 key购买 nike

如何获取特定宽度和高度的网络摄像头视频源?

我对 OpenCV 库的经验为零,因此我需要这方面的帮助。此代码来自 geeksforgeeks.com。这是我现在唯一拥有的东西。

我想要实现的是,我只想检测视频输入的指定区域中的运动。

import cv2, time, pandas



from datetime import datetime



static_back = None
motion_list = [ None, None ]
time = []
df = pandas.DataFrame(columns = ["Start", "End"])
video = cv2.VideoCapture(0)



while True:
check, frame = video.read()
motion = 0
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
gray = cv2.GaussianBlur(gray, (21, 21), 0)



if static_back is None:
static_back = gray
continue

diff_frame = cv2.absdiff(static_back, gray)

thresh_frame = cv2.threshold(diff_frame, 30, 255, cv2.THRESH_BINARY)[1]
thresh_frame = cv2.dilate(thresh_frame, None, iterations = 2)

(cnts, _) = cv2.findContours(thresh_frame.copy(),
cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)

for contour in cnts:
if cv2.contourArea(contour) < 50000:
continue
motion = 1

(x, y, w, h) = cv2.boundingRect(contour)
# making green rectangle arround the moving object
cv2.rectangle(frame, (x, y), (x + w, y + h), (0, 255, 0), 3)

motion_list.append(motion)

motion_list = motion_list[-2:]

if motion_list[-1] == 1 and motion_list[-2] == 0:
time.append(datetime.now())

if motion_list[-1] == 0 and motion_list[-2] == 1:
time.append(datetime.now())

cv2.imshow("Gray Frame", gray)

cv2.imshow("Difference Frame", diff_frame)

cv2.imshow("Threshold Frame", thresh_frame)

cv2.imshow("Color Frame", frame)

key = cv2.waitKey(1)
if key == ord('q'):
# if something is movingthen it append the end time of movement
if motion == 1:
time.append(datetime.now())
break


for i in range(0, len(time), 2):
df = df.append({"Start":time[i], "End":time[i + 1]}, ignore_index = True)

df.to_csv("Time_of_movements.csv")
video.release()
cv2.destroyAllWindows()

最佳答案

您似乎想要获取每一帧特定区域的感兴趣区域 (ROI)。要在 OpenCV 中执行此操作,我们可以使用边界框坐标裁剪图像。将 (0,0) 视为图像的左上角,从左到右为 x 方向,从上到下为 y 方向。如果我们将 (x1, y1) 作为 ROI 的左上角顶点并将 (x2,y2) 作为右下角顶点,我们可以通过以下方式裁剪图像:

ROI = frame[y1:y2, x1:x2]

举例说明:

-------------------------------------------
| |
| (x1, y1) |
| ------------------------ |
| | | |
| | | |
| | ROI | |
| | | |
| | | |
| | | |
| ------------------------ |
| (x2, y2) |
| |
| |
| |
-------------------------------------------

我们能够做到这一点,因为图像在 OpenCV 中存储为 Numpy 数组。 Here是 Numpy 数组索引和切片的重要资源。获得所需的投资返回率后,您可以在此区域进行运动检测。

关于python - 仅检查 OpenCV 中视频源的特定部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55943596/

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