gpt4 book ai didi

python - 如何使用 2D Numpy 数组放置 pop/append?

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

我有一个尺寸为 640x512 的图像帧,存储为全白色像素的 Numpy 数组。我想不断删除/弹出(0)最左边的列,并在每次迭代中附加一个黑色列。本质上,我试图将图像从右移到左,最终用黑色像素替换整个图像,一次一列。我尝试使用 np.concatenate() 但我一直收到这两个错误。

ValueError: all the input arrays must have same number of dimensions

ValueError: could not broadcast input array from shape (512,1) into shape (640)

如果可能,我想就地进行。这是一个例子。

大小为 640x512 的初始空白帧

每次迭代都会向帧中添加一个新的黑色列(1 像素),最终结果是一个全黑的图像

enter image description here

此弹出/推送操作类似于队列,但我想直接在 2D Numpy 数组上执行此操作。我不想使用任何其他数据结构,因为我将这些图像直接放入 OpenCV,所以我想将其保留为 Numpy 数组。如何一次移动 2D numpy 数组一个像素?

import numpy as np
import cv2

black_column = np.zeros([512,1], dtype=np.uint8)
blank_pixels = np.zeros([512, 640], dtype=np.uint8)
blank_pixels[:] = 255

while True:
# Pop
blank_pixels[:-1] = blank_pixels[1:]
# Push
blank_pixels[-1] = black_column

#blank_pixels[:] = np.concatenate(blank_pixels[1:], black_column)

cv2.imshow('blank_pixels', blank_pixels)
cv2.waitKey(1)

最佳答案

此处赋值比串联更有效。


blank = np.full((640, 512), 255, dtype=np.uint8)

for i in range(blank.shape[1]-1, -1, -1):
blank[:, i] = 0
cv2.imshow('img', blank)
cv2.waitKey(1)

产生这个:

enter image description here


对于非白色图像,您可以滚动:

blank = np.random.randint(1, 256, (640, 512), dtype=np.uint8)

for i in range(blank.shape[1]-1, -1, -1):
blank = np.roll(blank, -1, axis=1)
blank[:, -1] = 0
cv2.imshow('img', blank)
cv2.waitKey(1)

这会产生:

enter image description here

关于python - 如何使用 2D Numpy 数组放置 pop/append?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55803976/

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