将OpenCV Mat转移到iPhone的方法

时间:2016-09-18 15:45:47

标签: python ios swift opencv raspberry-pi

我在RaspberryPi 2上做了一个计算机视觉项目。 计算机视觉是通过众所周知的OpenCV库和Python绑定完成的。 我想展示一下Raspberry Pi在iOS应用程序中的实时流程。

Raspberry Pi正在制作的图像是OpenCV Mats,它在Python中不亚于Numpy Arrays。 另一端的iPhone应用程序没有OpenCV细化功能,只能在我的逻辑中使用图像。

现在,虽然我正在设计这个东西,但我无法找到最好的方法。

我会用这种方式分开问题:

  1. 传输信息的最佳方式:TCP服务器套接字连接或Web API以某种方式下载新图像?
  2. 我发送的信息的格式:多维数值的数组(直接取自Mat),在这种情况下如何解码iPhone上的信息,或者将垫子转换为Raspberry Pi上的OpenCV图像然后将它存放在某个地方并发送它(对我而言似乎很麻烦而且很慢)?
  3. 您对此有何看法?

    提前致谢。

1 个答案:

答案 0 :(得分:0)

我用这种方式解决了问题:

  1. 使用cv2.imencode(extension, mat)函数对图像Mat进行编码,该函数返回带编码图像的字节数组。
  2. 使用TCP套接字发送生成的字节数组。
  3. 具体做法是:

    用于转换的功能是

    def mat_to_byte_array(mat, ext):
        success, img = cv2.imencode(ext, mat)
        bytedata = img.tostring() # numpy function used for casting to bytearray
        return success, bytedata
    

    在iOS上,我使用SwiftSocket库来实现TCP客户端。

    现在这一切都很顺利。

    非常感谢。