簡體   English   中英

如何在2D Numpy數組中放置彈出/追加?

[英]How to inplace pop/append with 2D Numpy array?

我有一個尺寸為640x512的圖像幀,存儲為所有白色像素的Numpy數組。 我想不斷刪除/ pop(0)最左邊的列,並在每次迭代中添加一個黑列。 本質上,我試圖將圖像從右移到左,以最終將整個圖像替換為黑色像素,一次替換一列。 我嘗試使用np.concatenate()但我一直收到這兩個錯誤。

ValueError:所有輸入數組的維數必須相同

ValueError:無法將輸入數組從形狀(512,1)廣播到形狀(640)

如果可能,我想就地執行此操作。 這是一個例子。

大小為640x512初始空白幀

每次迭代都會在幀中添加一個新的黑色列(1像素),最終結果將具有完全黑色的圖像

在此處輸入圖片說明

此彈出/推入操作類似於隊列,但我想直接在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)

產生這個:

在此處輸入圖片說明


對於非白色圖像,可以使用以下方法roll

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)

這將產生:

在此處輸入圖片說明

我看不到您提供的圖片。 您是在談論這種效果嗎?

import cv2
import numpy as np


blank_pixels = np.ones([512, 640], dtype=np.uint8)*255

for i in range(640):
    # Pop
    blank_pixels[:, :-1] = blank_pixels[:, 1:]
    # Push
    blank_pixels[:, -1] = 0
    cv2.imshow('blank_pixels', blank_pixels)
    cv2.waitKey(1)
cv2.waitKey(0)
cv2.destroyAllWindows()

blank_pixels[:,:1] = black_column

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM