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

2024-10-03 17:26:34 发布

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

因此,我有一个连续的数据流通过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


Tags: 数据importdatacv2ser数据流灰度aa
1条回答
网友
1楼 · 发布于 2024-10-03 17:26:34

您的代码需要看起来像这样,但它未经测试,因为我没有您的图像源

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字节的数据缓冲区,或者提供一些串行代码,以与源代码相同的方式发送图像

相关问题 更多 >