我正在制作一个运动检测程序,它首先从实时视频馈送中获取参考帧,并检测程序启动时所采用的参考帧是否发生了任何变化。
变量:
refFrame =3维图像,这是程序启动时从网络摄像头提要中获得的彩色帧。(静态图像,即摄像头捕获的第一帧)
myFrame =3维视频源,反映网络摄像头的实时视频源(直接来自网络摄像头的实际实时视频源)
diffFrame =2维二进制视频提要,它显示当前视频提要与启动程序时拍摄的参考图像帧之间的差异。(黑白视频源)
threshFrame =二维二进制视频提要,显示diffFrame视频直播提要的阈值格式。(不同格式的黑白视频源)
我的目标是使用vstack将所有4帧以4x4格式堆叠在一起,因为我已经成功地将3维和2维图像水平堆叠在一起。目前,我在堆叠4张图片时遇到了问题,因为它们的尺寸不同。我怎么可能把这4张图片堆叠在一起呢?
# stack 'em
picsStack1 = np.hstack((refFrame,myFrame))
picsStack2 = np.hstack((diffFrame,threshFrame))
# show video frame
cv.imshow('Hidden Cam',np.vstack((picsStack1, picsStack2))) 发布于 2021-04-26 08:44:55
我们将把任务分成3个函数:
canvas_size函数获取其尺寸。代码可能如下所示:
import cv2
import numpy as np
def convert_channels(img):
if img.ndim == 2:
return cv2.cvtColor(img, cv2.COLOR_GRAY2BGR)
return img
def canvas_size(imgs):
h_max = 0
w_max = 0
for img in imgs:
h, w, _ = img.shape
if h > h_max:
h_max = h
if w > w_max:
w_max = w
return w_max, h_max
def padded_imgs(imgs):
max_w, max_h = canvas_size(imgs)
imgs_new = []
for img in map(convert_channels, imgs):
h, w, _ = img.shape
canvas = np.zeros((max_h, max_w, 3)).astype("uint8")
canvas[:h, :w] = img
imgs_new.append(canvas)
return imgs_new
while True:
# Your code here
refFrame, myFrame, diffFrame, threshFrame = padded_imgs([refFrame, myFrame, diffFrame, threshFrame])
picsStack1 = np.hstack((refFrame, myFrame))
picsStack2 = np.hstack((diffFrame, threshFrame))
cv.imshow('Hidden Cam',np.vstack((picsStack1, picsStack2)))
# Your code herehttps://stackoverflow.com/questions/67257875
复制相似问题