我想通過 udp 制作一個視頻流程式,使用 opencv,我想通過將 255 個顏色值轉換為 16 個顏色值來進行壓縮,因為它可以節省一半的流量并且質量不會那么差。我知道如何將 255 個值轉換為 16 個值:
opencvimg = numpy.multiply(opencvimg//16,16)
但我不知道將兩個值放入 1 個位元組以節省流量的有效方法。它必須高效,因為我希望它在 rpi 上運行(github.com/Open-ATS-Github 上的完整代碼)。
uj5u.com熱心網友回復:
有一個不涉及顯式算術的解決方案:您可以構建一個 256 x 256 條目的完整查找表,為一對輸入位元組提供打包結果。
如果這樣的表看起來大得不合理,請認為您正在處理更大的影像。
使用平面向量還是使用矩陣更好,以及快取效果是否不會破壞這項作業是一個實驗問題。
uj5u.com熱心網友回復:
我想你的意思是:
import numpy as np
# Make synthetic data
x = np.arange(256, dtype=np.uint8)
# Take pairs of elements shifted by 4 bits and OR together
d2by4 = (x[::2] & 0xf0) | (x[1::2] >> 4)
In [16]: d2by4.dtype
Out[16]: dtype('uint8')
In [21]: d2by4
Out[21]:
array([ 0, 0, 0, 0, 0, 0, 0, 0, 17, 17, 17, 17, 17,
17, 17, 17, 34, 34, 34, 34, 34, 34, 34, 34, 51, 51,
51, 51, 51, 51, 51, 51, 68, 68, 68, 68, 68, 68, 68,
68, 85, 85, 85, 85, 85, 85, 85, 85, 102, 102, 102, 102,
102, 102, 102, 102, 119, 119, 119, 119, 119, 119, 119, 119, 136,
136, 136, 136, 136, 136, 136, 136, 153, 153, 153, 153, 153, 153,
153, 153, 170, 170, 170, 170, 170, 170, 170, 170, 187, 187, 187,
187, 187, 187, 187, 187, 204, 204, 204, 204, 204, 204, 204, 204,
221, 221, 221, 221, 221, 221, 221, 221, 238, 238, 238, 238, 238,
238, 238, 238, 255, 255, 255, 255, 255, 255, 255, 255], dtype=uint8)
這就是說...... “從第一個開始的每個第二個元素的高半位元組取x它,或者它與從第二個開始的每個第二個元素的高半位元組右移 4 位x。”
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/436547.html
