[英]subtract a smaller ndarray from a larger onethen use whats left to pad the smaller ndarray to the size as the larger ndarray
我有一個理想的 ndarray 大小,它將視頻表示為一個 numpy 數組。 大小的分辨率為 1080X1920Xfr,其中 Fr 是幀數。 給定一個隨機視頻,它可能沒有正確的 excersize 分辨率,所以我們用藍色像素填充幀,直到它的分辨率為 1080X1920。
我們想一次性完成,而不是遍歷幀,我想我們可以
具有比典型視頻更長的 fr 值。
以某種方式從理想視頻中減去隨機視頻
將理想視頻中的所有像素值設為藍色
然后將從理想中減去的部分添加到隨機視頻中。
所以我們最初會檢查隨機視頻中的幀數是否> Fr ...如果是我們跳過,然后繼續做減法。
我有一個代碼,可以拍攝視頻,將其展平並檢查大小是否大於某個值,如果它不是跳過,則它會創建一個具有差異的 numpy 數組,用 0 填充它並將其附加到重新塑造它之前的視頻。 這使得正在處理的所有視頻具有相同的幀數。
這是代碼。 我認為您看到上面的代碼要復雜得多,我們將不勝感激您幫助解決它。
videodata = skvideo.io.vread(dirname2)
videodata = videodata.flatten()
# following code pads the video so that it all videos are the same size
x = (1080 * 1920 * 3 * 12600) - videodata.size
y = [[0] for i in range(x)]
y = np.asarray(y)
y = y.flatten()
videodata = np.concatenate((videodata, y), -1)
videodata = videodata.reshape(1, 12600, 1080, 1920, 3)```
根據我從問題中的理解,您的問題有兩個子問題:
這兩個問題都可以用numpy.pad解決。
讓videodata
為大小為 1065x1900 的數組,包含 1200 幀。
a = np.random.random((1065, 1900, 3, 1200))
因此,要使視頻分辨率為 1080x1920,我們可以執行以下操作:
b = np.pad(a, ((7,8),(10,10),(0,0),(0,0)), mode='constant', constant_values=0)
b.shape
你會得到(1080, 1920, 3, 1200)
。 所以現在你的視頻是 1080x1920。 值(7,8)
指示 numpy 在該軸上填充(之前,之后),因此我們在第一個軸的前面填充 7 個值,在末尾填充 8 個值。
現在要添加額外的幀,我們將沿最后一個軸填充。
b = np.pad(a, ((7,8),(10,10),(0,0),(0,10)), mode='constant', constant_values=0)
b.shape
我們會得到(1080, 1920, 3, 1200)
。 因此,我們向視頻添加了 10 幀。
希望這能回答你的問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.