【问题标题】:Replacing 3D submatrix in Numpy and OpenCV2在 Numpy 和 OpenCV2 中替换 3D 子矩阵
【发布时间】:2020-08-10 20:56:10
【问题描述】:

Replace sub part of matrix by another small matrix in numpy 通常似乎适合我的目的,但我遇到了一些我无法调和的事情。考虑下面的代码,它创建了两个 3D 矩阵,形状为 OpenCV2 网络摄像头输入(在我的例子中是 (480, 640, 3)),一个是全 1(frame),一个是随机浮点数(rgb_noise_mask),将frame 中的指定子矩阵替换为rgb_noise_mask 的相同子矩阵,并将其显示到屏幕上。此代码按预期工作,在白色区域上显示一个基于 RGB 的静态块。

import numpy as np
import cv2

cap = cv2.VideoCapture(0)
ret, frame = cap.read()

frame = np.ones(frame.shape)
rgb_noise_mask = np.random.random(size=frame.shape)

while True:
    boxes = [[300,300,30,30]]
    for box in boxes:
        x, y, width, height = box
        frame[y:y2, x:x2] = rgb_noise_mask[y:y2, x:x2]
        
    cv2.imshow("frame", frame)
    if cv2.waitKey(1) & 0xFF == ord("q"):
        break
cap.release()
cv2.destroyAllWindows()

现在取下辅助轮并使用实际的网络摄像头输入而不是伪造它。同一个框现在显示为统一的黑色,而不是预期的颜色:

import numpy as np
import cv2

cap = cv2.VideoCapture(0)
ret, frame = cap.read()

rgb_noise_mask = np.random.random(size=frame.shape)

while True:
    ret, frame = cap.read()
    boxes = [[300,300,30,30]]
    for box in boxes:
        x, y, width, height = box
        frame[y:y2, x:x2] = rgb_noise_mask[y:y2, x:x2]
        
    cv2.imshow("frame", frame)
    if cv2.waitKey(1) & 0xFF == ord("q"):
        break
        
cap.release()
cv2.destroyAllWindows()

为什么会这样,我该如何解决?进一步增加我的困惑是,如果我在第二个代码示例中将 frame[y:y2, x:x2] = rgb_noise_mask[y:y2, x:x2] 替换为 frame[y:y2, x:x2] = frame[y:y2, x:x2][::-1],它的行为与预期一样,并显示具有该正方形镜像的实时输出。

【问题讨论】:

    标签: python numpy opencv


    【解决方案1】:

    这里的问题是ret, frame = cap.read() 返回frame 作为带有dtype=np.uint8 的numpy 数组,而rgb_noise_mask0,1 之间浮动,所以所有0 在转换为uint8 时。

    一个简单的解决方法是使用randint 将噪声生成为整数:

    rgb_noise_mask = np.random.randint(0,256, size=frame.shape, dtype=np.uint8)
    

    【讨论】:

    • 在其他地方给出的重要时刻我有像frame = (rgb_mask * frame).astype(np.uint8) 这样的行。谢谢!
    猜你喜欢
    • 2017-05-09
    • 1970-01-01
    • 2016-08-25
    • 1970-01-01
    • 2012-11-11
    • 2014-12-17
    • 2018-01-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多