将浮点列表转换为bytelike对象会导致图像损坏

2024-10-02 22:35:49 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试将数据从Keysight作用域转换为.png映像。 当我在网上查看如何操作时,我无意中发现了以下代码:

# Download the screen image.
# --------------------------------------------------------
sDisplay = do_query_ieee_block(":DISPlay:DATA? PNG")
# Save display data values to file.
f = open("screen_image.png", "wb")
f.write(sDisplay)
f.close()

上面代码的问题是我不确定do_query_ieee_block是什么。我以为它在{}下面,但在那里找不到。在网上查看之后,我了解到query_binary_valuespyvisa假设数据在IEEE中或多或少是一样的

根据这些信息,我编写了以下代码:

import pyvisa
import struct

IDN="SomeScopeIDN" #something like 'USB0::0xhhhh::0xhhhh::MYdddddddd::0::INSTR' 
scope=pyvisa.ResourceManager().open_resource(IDN)
binImage=self.scope.query_binary_values(":DISPlay:DATA? PNG") #This gets a list of floats
byteImage=struct.pack('%sf' % len(binImage),*binImage) #Convert the list to bytes-like object
path=r"c:\Users\user\Desktop\Scope_Image.png"
with open (path,'wb') as f:
  f.write(byteImage)

这会创建一个图像,但结果不好:

Corrupted Image

从剪贴工具:

Corrupted Image

正如您所看到的,只有图像的上10%是好的,而其余的则不是好的(需要指出的是,每次我从示波器检索新数据时,我都会得到一个不同的损坏区域,该区域在图片的50-90%之间。大多数情况下,损坏区域在80-90%之间,如上图所示)

所以基本上我的问题是:

  1. 可能是我没有从仪器中读取全部数据吗?如果是这样,我们如何克服这个问题

  2. 这会不会是因为包装不当造成的?如果是,解决方案是什么


Tags: the数据代码image区域pngopenquery
1条回答
网友
1楼 · 发布于 2024-10-02 22:35:49

看到一个可能有用的示例:

  1. datatype='B', container=bytearray作为参数添加到query_binary_values()

  2. 可以互换地尝试':DISP:DATA? ON,OFF,PNG'

import pyvisa

IDN="SomeScopeIDN" #something like 'USB0::0xhhhh::0xhhhh::MYdddddddd::0::INSTR' 
scope=pyvisa.ResourceManager().open_resource(IDN)
binImage=self.scope.query_binary_values(":DISPlay:DATA? PNG", datatype='B', container=bytearray)
path=r"c:\Users\user\Desktop\Scope_Image.png"
with open (path,'wb') as f:
  f.write(byteImage)

相关问题 更多 >