【问题标题】:from string of bytes to OpenCV's IplImage in Python?从字节字符串到 Python 中的 OpenCV 的 IplImage?
【发布时间】:2011-02-27 13:14:24
【问题描述】:

我正在从网络摄像头流式传输一些数据。当我获得完整图像的所有字节时(在名为byteString 的字符串中),我想使用 OpenCV 显示图像。完成得足够快,这会将视频从网络摄像头“流式传输”到 OpenCV 窗口。

这是我为设置窗口所做的工作:

cvNamedWindow('name of window', CV_WINDOW_AUTOSIZE)

当字节串完成时,我会这样做:

img = cvCreateImage(IMG_SIZE,PIXEL_DEPTH,CHANNELS)
buf = ctypes.create_string_buffer(byteString) img.imageData = ctypes.cast(buf, ctypes.POINTER(ctypes.c_byte)) cvShowImage('窗口名称', img) cvWaitKey(0)

由于某种原因,这会产生错误:

文件“C:\Python26\lib\site-packages\ctypes_opencv\highgui_win32.py”,第 226 行,在执行中 返回函数(*args, **kwargs)

WindowsError: exception: access violation reading 0x015399E8

有人知道如何做我想做的事/如何解决这个疯狂的违规错误吗?

【问题讨论】:

    标签: python string image opencv byte


    【解决方案1】:

    我实际上解决了这个问题并忘记发布解决方案。以下是我的做法,尽管它可能并不完全可靠:

    我分析了来自我正在执行此操作的网络摄像机的 MJPEG 的标头,然后我一次只从流中读取 1 个字节,并且当我检测到下一张图像的标头也在bytestring,我把最后 42 个字节剪掉了(因为那是头部的长度)。

    然后我有了 JPEG 的字节,所以我简单地使用 open(...) 方法创建了一个新的 Cv 图像,并将包装在 StringIO 类中的字节字符串传递给它。

    【讨论】:

    • 您能否提供有关您的解决方案的更多详细信息,我的意思是,代码片段,我有类似的问题。
    【解决方案2】:

    泰勒:

    我不确定您要做什么..我有一些猜测。

    如果您只是尝试从连接到您的电脑的网络摄像头读取图像,那么此代码应该可以工作:

    import cv
    
    cv.NamedWindow("camera", 1)
    
    capture = cv.CaptureFromCAM(0)
    
    while True:
        img = cv.QueryFrame(capture)
        cv.ShowImage("camera", img)
        if cv.WaitKey(10) == 27:
            break
    

    您是否正在尝试从网络摄像头流式传输视频? 如果是这样,您应该查看其他帖子: opencv-with-network-cameras

    如果由于某种原因你不能以任何这些方式做到这一点,那么你可以以某种方式将图像保存在硬盘驱动器上,然后通过执行简单的 cvLoadImage 将其加载到你的 opencv 程序中(当然这种方式要慢得多)。

    另一种方法是通过读取 byteString 中的每个值手动设置新的图像像素,执行如下操作:

    for(int x=0;x<640;x++){
                    for(int y=0;y<480;y++){
                            uchar * pixelxy=&((uchar*) (img->imageData+img->widthStep*y))[x];
                            *pixelxy=buf[y*img->widthStep + x]; 
                    }
            }
    

    这也比使用硬盘驱动器更慢但更快。 无论如何,希望这对您有所帮助,您还应该指定您使用的是哪个 opencv 版本。

    【讨论】:

      猜你喜欢
      • 2021-08-06
      • 2021-03-27
      • 1970-01-01
      • 2019-09-04
      • 2019-02-22
      • 2020-06-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多