0

当我将图像转换为字符串(使用 simplecv 方法 toString())从服务器发送到套接字时出现问题,我无法将其转换回图像。

[编辑] 添加了评论建议的代码

但是,我需要尽快将我的屏幕“流式传输”给客户。如果我走错方向,请纠正我。

我试过以下(客户):

while 1:
    x = sock.recv(4096)
    y = sock.recv(4096)
    imgSize = (int(x),int(y))
    img = sock.recv(429467296)
    try:
        if img != None:
            bmp = cv.CreateImageHeader(imgSize, cv.IPL_DEPTH_8U, 3)
            cv.SetData(bmp,img)
            cv.CvtColor(bmp,bmp, cv.CV_RGB2BGR)
            screenImg = Image(bmp)
            img = None
            screenImg.show()
   except:
       print 'Error with image'

主持人:

while 1:
    screenImg = sc.getImage()
    screenImg = screenImg.scale(0.5)
    string = screenImg.toString()
    client.sendall(str(screenImg.size()[0]))
    client.sendall(str(screenImg.size()[1]))
    client.sendall(string)

但我收到 Microsoft Visual C++ 运行时库错误,告诉我 pythonw.exe 以不寻常的方式终止

这可能是由于传输时数据丢失造成的吗?还是我在接收数据时使用了太大的缓冲区数?

4

1 回答 1

0

数据包大小可能太大。我会创建一个非常小的图像并验证它是否被设置为:

img = Image((5,5))

这将生成一个 5 x 5 的黑色图像。您还可以执行 img.invert() 来查看它是否变为完全白色。我还将在 .NET IDE 中的 sock.recv() 处设置一个断点,并在尝试转换为图像之前手动查看套接字缓冲区以验证字符串是否匹配,或者如果你不能断点而不是 cout >> 到一个文件。

于 2013-09-16T22:22:27.460 回答