首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用OpenCV、NumPy和Python将彩色图像和二进制图像堆叠在一起?

如何使用OpenCV、NumPy和Python将彩色图像和二进制图像堆叠在一起?
EN

Stack Overflow用户
提问于 2021-04-26 04:16:59
回答 1查看 123关注 0票数 2

我正在制作一个运动检测程序,它首先从实时视频馈送中获取参考帧,并检测程序启动时所采用的参考帧是否发生了任何变化。

变量:

refFrame =3维图像,这是程序启动时从网络摄像头提要中获得的彩色帧。(静态图像,即摄像头捕获的第一帧)

myFrame =3维视频源,反映网络摄像头的实时视频源(直接来自网络摄像头的实际实时视频源)

diffFrame =2维二进制视频提要,它显示当前视频提要与启动程序时拍摄的参考图像帧之间的差异。(黑白视频源)

threshFrame =二维二进制视频提要,显示diffFrame视频直播提要的阈值格式。(不同格式的黑白视频源)

我的目标是使用vstack将所有4帧以4x4格式堆叠在一起,因为我已经成功地将3维和2维图像水平堆叠在一起。目前,我在堆叠4张图片时遇到了问题,因为它们的尺寸不同。我怎么可能把这4张图片堆叠在一起呢?

代码语言:javascript
复制
        # stack 'em
        picsStack1 = np.hstack((refFrame,myFrame))
        picsStack2 = np.hstack((diffFrame,threshFrame))

        # show video frame
        cv.imshow('Hidden Cam',np.vstack((picsStack1, picsStack2)))     
EN

回答 1

Stack Overflow用户

发布于 2021-04-26 08:44:55

我们将把任务分成3个函数:

  1. 定义了一个接受图像数组的函数。如果数组是二维的,意味着它是灰度的,则将其转换为三维并返回三维数组。否则,返回原始数组。

  1. 定义一个函数,该函数将接受图像数组列表,并返回图像中最大的宽度和高度。

  1. 定义了一个函数,该函数将接受图像数组的列表,并返回图像列表,其中包含原始列表中仅广播到黑色画布的每个图像。黑色画布应从canvas_size函数获取其尺寸。

代码可能如下所示:

代码语言:javascript
复制
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 here
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67257875

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档