Python 如何从USB端口查看连续的8位灰度图像数据流?

Python 如何从USB端口查看连续的8位灰度图像数据流?,python,opencv,image-processing,Python,Opencv,Image Processing,因此,我有一个连续的数据流通过Windows上的COM4端口。我正在用以下代码读取数据: import serial import cv2 from time import sleep ser = serial.Serial ("COM4", 115200) while True: received_data = ser.read() sleep(0.03) data_left = ser.inWaiting()

因此,我有一个连续的数据流通过Windows上的COM4端口。我正在用以下代码读取数据:

import serial
import cv2
from time import sleep

ser = serial.Serial ("COM4", 115200)    
while True:
    received_data = ser.read()              
    sleep(0.03)
    data_left = ser.inWaiting()             
    a=cv2.imread(received_data,0)
    cv2.imshow("Image",a)
    print (received_data)
openCV部件不工作,spyder出现以下错误:

TypeError: bad argument type for built-in operation
如果我取出openCV部分,我可以看到如下字节:

b'AA\x00A::\x00A:A\x00AA:\x00A:A\x00A:A\x00:A:\x00A:AAA::AAA\x00AAA\x00A::\x00:AA\x00:::\x00AAA\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00::A\x00A::A::::A::A:A\x00AAA\x00A::\x00AA:\x00:A:\x00::A\x00AAA\x00A:A\x00:A:\x00:A:\x00::AAA::::A:A::\x00AA:\x00:::\x00AAA\x00::A\x00:AA\x00:AA\x00::A\x00:::\x00:A:\x00A::AAAA:A:AAA:\x00A::\x00:AA\x00AAA\x00:::\x00:A:\x00AAA\x00AAA\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00::AA:\x00A::\x00:A:\x00:::\x00:::\x00AAA\x00:::\x00:A:\x00:A:\x00A:3\x00AAAAA:A:::AA::\x00::A\x00A::\x00A:A\x00:::\x00:::\x00::A\x00:::\x00A::\x00:AA\x00AA:AA::AAAA:::\x00::A\x00AA:\x00A::\x00:A:\x00:AA\x00A::\x00AA:\x00AA:\x00:AA\x00:A:\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00A\x00:::\x00AA:\x00:AA\x00:A:\x00AAA\x00:::\x00A::\x00A::\x00AAAA:AAA:A\x00:AA\x00A::\x00:AA\x00:::\x00:A:\x00A:A'
该数据是8位灰度图像数据。如何使用python查看连续的数据流(有点像灰度视频)


这是来自FPGA的原始8位灰度图像数据。尺寸为160*120,起始位为0,停止位为1

您的代码需要类似于此,但未经测试,因为我没有您的图像源

import cv2
import numpy as np

while True:

    bytesBuffer = read and accumulate 160*120 bytes from serial

    # Make bytes buffer into Numpy array and reshape
    frame =  np.frombuffer(bytesBuffer, dtype=np.uint8).reshape((120,160))

    cv2.imshow("Frame", frame)
    cv2.waitKey(30)
您需要知道帧何时开始,以便知道何时有左上角的像素

您可能需要交换120和160。实际上,它假定高度为120像素,宽度为160像素

代码的问题在于
cv2.imread()
需要一个包含JPEG/PNG编码图像的文件,而不是当前给定的原始字节


您可以有效地共享问题中160x120字节的数据缓冲区,或者提供一些串行代码,以与源代码相同的方式发送图像。

您的代码需要类似于此,但未经测试,因为我没有您的图像源

import cv2
import numpy as np

while True:

    bytesBuffer = read and accumulate 160*120 bytes from serial

    # Make bytes buffer into Numpy array and reshape
    frame =  np.frombuffer(bytesBuffer, dtype=np.uint8).reshape((120,160))

    cv2.imshow("Frame", frame)
    cv2.waitKey(30)
您需要知道帧何时开始,以便知道何时有左上角的像素

您可能需要交换120和160。实际上,它假定高度为120像素,宽度为160像素

代码的问题在于
cv2.imread()
需要一个包含JPEG/PNG编码图像的文件,而不是当前给定的原始字节



您可以有效地共享问题中160x120字节的数据缓冲区,或者提供一些串行代码,以与源代码相同的方式发送图像。

您需要知道图像的形状(即尺寸)。我如何理解?这与决议案有关吗?如果我们假设我知道尺寸,我应该怎么做?是的,你可能需要知道图像从哪里开始,从哪里结束,你需要知道格式,因此,例如,如果是RGB原始数据,则必须执行与jpeg图像不同的操作。这是一个8位原始灰度图像数据,其分辨率为160x120。这称为什么是numpy数组?您需要知道图像的形状(即尺寸)。我如何理解这一点?这与决议案有关吗?如果我们假设我知道尺寸,我应该怎么做?是的,你可能需要知道图像从哪里开始,从哪里结束,你需要知道格式,例如,如果是RGB原始数据,则必须执行与jpeg图像不同的操作。这是一个8位原始灰度图像数据,其分辨率为160x120。这称为numpy阵列是什么?您好。谢谢你回答我的问题。我是FPGA的新手,我使用的是一个连接到相机的FPGA,所以我不知道什么时候图片真正开始。但是当我打开一个开关时,FPGA发送字节,所以我可能不需要起始位表示。所以,我发送0作为起始位,1作为停止位OK,我上面的代码应该适用于该场景。如果没有,请收集前120*160字节并保存在一个文件中,然后通过Dropbox或Google Drive或类似的方式共享,我将为您解决如何显示它。请注意,如果您共享一个文件,它应该是二进制的,长度正好是19200字节。我意识到我的图像实际上有640*480分辨率。因此,我将向您发送一个包含307200 bytesHi的文件。谢谢你回答我的问题。我是FPGA的新手,我使用的是一个连接到相机的FPGA,所以我不知道什么时候图片真正开始。但是当我打开一个开关时,FPGA发送字节,所以我可能不需要起始位表示。所以,我发送0作为起始位,1作为停止位OK,我上面的代码应该适用于该场景。如果没有,请收集前120*160字节并保存在一个文件中,然后通过Dropbox或Google Drive或类似的方式共享,我将为您解决如何显示它。请注意,如果您共享一个文件,它应该是二进制的,长度正好是19200字节。我意识到我的图像实际上有640*480分辨率。因此,我将向您发送一个包含307200字节的文件