相关疑难解决方法(0)

Python:读取12位打包的二进制图像

我有一个来自GigE相机的12位打包图像.它是一个小端文件,每3个字节保存2个12位像素.我试图使用python读取此图像,我尝试这样的事情:

import bitstring
import numpy

with open('12bitpacked1.bin', 'rb') as f:
    data = f.read()
ii=numpy.zeros(2*len(data)/3)
ic = 0

for oo in range(0,len(data)/3):
    aa = bitstring.Bits(bytes=data[oo:oo+3], length=24)
    ii[ic],ii[ic+1] = aa.unpack('uint:12,uint:12')
    ic=ic+2

b = numpy.reshape(ii,(484,644))
Run Code Online (Sandbox Code Playgroud)

简而言之:我读取3个字节,将它们转换为位,然后将它们解压缩为两个12位整数.

然而,结果与它应该是非常不同的.看起来图像被分成四个四分之一,每个四分之一扩展到完整图像大小然后重叠.

我在这做错了什么?

更新:以下是测试文件:

12位打包

12位正常

它们不会相同,但它们应该显示相同的图像.12位法线具有12位像素作为uint16.

with open('12bit1.bin', 'rb') as f:
    a = numpy.fromfile(f, dtype=numpy.uint16)

b = numpy.reshape(a,(484,644))
Run Code Online (Sandbox Code Playgroud)

python binary unpack

6
推荐指数
1
解决办法
2743
查看次数

Python - 从二进制文件中读取10位整数

我有一个包含10位整数流的二进制文件.我想读它并将值存储在列表中.

它使用以下代码,它读取my_file并填充pixels整数值:

file = open("my_file", "rb")

pixels = []
new10bitsByte = ""

try:
    byte = file.read(1)
    while byte:
        bits = bin(ord(byte))[2:].rjust(8, '0')
        for bit in reversed(bits):
            new10bitsByte += bit
            if len(new10bitsByte) == 10:
                pixels.append(int(new10bitsByte[::-1], 2))
                new10bitsByte = ""             
    byte = file.read(1)

finally:
    file.close()
Run Code Online (Sandbox Code Playgroud)

将字节读入位并将其读回"10位"字节似乎并不优雅.有没有更好的方法呢?

使用8位或16位整数,我可以直接使用file.read(size)并将结果转换为int.但是在这里,因为每个值都存储在1.25字节,我需要像file.read(1.25)...

python binary file-io

6
推荐指数
1
解决办法
2447
查看次数

为什么 numpy 的左移位比 python 慢?

numpy我正在尝试对整数(特别是对象)进行位移numpy.uint64,并且我需要它们很快。在下面的实现中,我将对象放入numpy.arrayonly 中,因为这是唯一可以接受位左移的对象。如果有更快的实施,我会接受。

from timeit import timeit
print(timeit("a << 1", "a = int(2**60)"))
print(timeit("a << 1", "import numpy as np; a = np.array([2 ** 60], dtype=np.uint64)"))
print(timeit("np.left_shift(a, 1)", "import numpy as np; a = np.array([2 ** 60], dtype=np.uint64)"))
Run Code Online (Sandbox Code Playgroud)

返回:

0.056681648000000084
1.208092987
1.1685176299999998
Run Code Online (Sandbox Code Playgroud)

为什么 python 比这个操作快得多numpy?有没有办法获得可比较的速度numpy

python numpy

2
推荐指数
1
解决办法
651
查看次数

标签 统计

python ×3

binary ×2

file-io ×1

numpy ×1

unpack ×1