第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

Numpy 將 uint16 解包為 1-5-5-5 位塊

Numpy 將 uint16 解包為 1-5-5-5 位塊

我正在嘗試使用 numpy 將二進(jìn)制字符串轉(zhuǎn)換為 Python 中的圖像,但我很難找到一種使用非常規(guī)位分布處理它的好方法(據(jù)我所知)。這些是如何轉(zhuǎn)換以及轉(zhuǎn)換什么的細(xì)節(jié)。16 位紋理圖塊 (256*256)。每個(gè) bitu16 代表一個(gè)像素,其顏色的形式為 ARGB,MSB-to-LSB: 1 位透明度5 位紅色通道 5 位綠色通道 5 位藍(lán)色通道Numpy 并不真正支持任何 1 位或 5 位的東西。我嘗試使用不同的 argb 通道設(shè)置 np.dtype 但沒有任何運(yùn)氣。unpackbits 似乎不適用于 uint16 所以在那種情況下我可能不得不將它分成 2 個(gè) uint8dt = np.dtype([('a', np.bool_), ('r', np.half), ('g', np.half), ('b', np.half)])data = data.read(131072)dataFromBuffer = np.frombuffer(data, dtype=dt)img  = dataFromBuffer.reshape(256, 256)
查看完整描述

2 回答

?
米琪卡哇伊

TA貢獻(xiàn)1998條經(jīng)驗(yàn) 獲得超6個(gè)贊

在這種情況下,您對(duì)缺乏 bit numpy 位級(jí)別支持是正確的。可以按如下方式處理位的高級(jí)(但功能)方法:


image_16_bit = 123 # A 16bit integer.


bits = '{:016b}'.format(image_16_bit) 


transparency = int(bits[0], 2)

red_channel = int(bits[1:6], 2)

green_channel = int(bits[6:11], 2)

blue_channel = int(bits[11:], 2)


print(transparency, red_channel, green_channel, blue_channel) # 0 0 3 27

您可以對(duì)所有整數(shù)運(yùn)行此操作,然后收集各個(gè)通道值。最后,您可以將其轉(zhuǎn)換為一個(gè) numpy 數(shù)組,以將您的圖像作為一個(gè) numpy 數(shù)組。


查看完整回答
反對(duì) 回復(fù) 2023-03-30
?
幕布斯7119047

TA貢獻(xiàn)1794條經(jīng)驗(yàn) 獲得超8個(gè)贊

以下是如何使您的方法奏效:


# make small example

x = np.random.randint(0,1<<16,size=(5,5),dtype=np.uint16)


# set up dtype

dt = np.dtype([*zip('argb',(bool,*3*(np.uint8,)))])


# bit of bit twiddling


def unpack_argb(x):

    out = np.empty(x.shape,dt)

    for i,ch in enumerate(reversed('argb')):

        out[ch] = (x>>(5*i))&31

    return out


def pack_argb(x):

    out = x['a'].astype(np.uint16)

    for ch in 'rgb':

        out <<= 5

        out += x[ch]&31

    return out


# check round trip

np.all(x == pack_argb(unpack_argb(x)))

# True

更新:


def argb16_to_rgba32(x):

    out = np.empty(x.shape+(4,),np.uint8)

    out[...,3] = (x>>8)&0x80

    out[...,0] = (x>>7)&0xf8

    out[...,1] = (x>>2)&0xf8

    out[...,2] = (x<<3)&0xf8

    return out


def rgba32_to_argb16(x):

    x16 = x.astype(np.uint16)&0xf8

    out = (x16[...,3]&0x80)<<8

    out += x16[...,0]<<7

    out += x16[...,1]<<2

    out += x16[...,2]>>3

    return out


查看完整回答
反對(duì) 回復(fù) 2023-03-30
  • 2 回答
  • 0 關(guān)注
  • 231 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)