Python 如何从USB端口查看连续的8位灰度图像数据流?
因此,我有一个连续的数据流通过Windows上的COM4端口。我正在用以下代码读取数据: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()
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字节的文件