首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Numpy和OpenCV2中三维子矩阵的替换

Numpy和OpenCV2中三维子矩阵的替换
EN

Stack Overflow用户
提问于 2020-08-10 20:56:10
回答 1查看 52关注 0票数 1

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

代码语言:javascript
运行
复制
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()

现在脱下训练轮,使用实际的网络摄像头输入,而不是伪造它。该框现在显示为统一的黑色,而不是预期的颜色:

代码语言:javascript
运行
复制
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],那么它的行为就像预期的那样,并以镜像的平方显示实时输出。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-08-10 21:09:11

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

一个简单的解决方法是用randint作为整数生成噪声。

代码语言:javascript
运行
复制
rgb_noise_mask = np.random.randint(0,256, size=frame.shape, dtype=np.uint8)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63347912

复制
相关文章

相似问题

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