2017-05-17 33 views
1

我有一个八度脚本,在该脚本中,我打开一个套接字服务器,并从连接的客户端接收一些命令。这已经起作用了。现在我需要发送数据到八度,主要是图像和处理它们。为了测试这个,我想要接收并显示灰度测试图像。Octave,通过套接字连接收到的显示图像不会显示

bufflen = 4096; 
[data,count]=recv(b,bufflen); 
imshow (data) 

图像窗口打开但它是空的。数据的大小恰好是我发送的图像文件的大小。我也试图与

imwrite (data, "test.jpg"); 

保存图像由此产生一个文件,但图像的每一行是一个长行。当我

imshow test.jpg 

一切打开图像作品,因为它应该出现在图像窗口并显示图像。

我通过netcat的与

>ncat.exe 127.0.0.1 12346 < test.jpg 

发送数据,这似乎工作,我能够将图像传送到另一台PC,并查​​看它。

非常感谢每一个提示或提示,谢谢。

+0

如果您需要帮助调试您的代码,您必须创建一个可以由试图帮助您的人运行的示例。请参阅https://stackoverflow.com/help/mcve而你甚至没有提到你使用哪个八度套接字来连接套接字... – Andy

+0

我在套接字包中使用win7上的八度4.2.1。 – Jan

回答

0

您发送您的JPEG作为字节流(ncat.exe 127.0.0.1 12346 < test.jpg),但您试图显示的是imshow,因为它将是一个未压缩的RGB,灰度或索引图像。您可以接收它并将其保存到临时文件,然后使用imread加载它。在这种情况下,graphics/image-magick将执行从JPE到RGB的解压缩。

+0

谢谢你,那是做的。 – Jan

+0

但现在我有一个其他问题,似乎在输入缓冲区的八度套接字recv不能大于4608字节。有关于此的任何想法? – Jan

+0

1月,我还在帮助邮件列表上回答了您的其他套接字相关问题。没有“4608字节”限制,并且很可能是代码中的问题。请用MCVE创建一个新问题。请添加使用的OS,Octave版本和使用的套接字包和版本 – Andy

0

在这里猜测,因为你没有提供太多的信息,但它听起来像是你的数据来作为载体,你需要把它重塑成一个阵列imshow

>> newdata = reshape(data, 64, 64) 

你没有向我们展示了一个输入数据的例子,因此您的数据也可能是一串字符,而图像数组需要是数值。要在重新塑形之前进行验证,您可以运行:

>> class(data) 

如果是这样,则需要将其转换为数值数组。您可以使用str2num为,但究竟是如何做到这一点,将取决于该字符串的样子,有没有价值分离器等

参见:

https://www.gnu.org/software/octave/doc/interpreter/String-Conversions.html

+0

这没有奏效,我得到错误:重塑:无法将1x1918阵列重塑为512x512阵列。确切的数字可能不正确。但问题出在我认为的问题上,Octave不明白这是一个图像,而是将其视为原始输入流。 – Jan

+1

八度图像只是一个数字数组。你如何将1x1918阵列变成512x512?如果它真的是512x512,则应该有512x512 = 262,144个值。你说你的缓冲区长度是4096,所以我猜测你在等待一个64x64的灰度图像(64x64 = 4096像素,每个像素都是一个整数)。问题是你目前没有图像。你有一个数据流,需要把它变成一个图像数组。 –

+1

刚刚看到Andy的评论如上。是的,如果你发送一个二进制JPEG,那就是问题所在。正如Andy在他的第一条评论中所说的那样,在你的问题中提供更好的细节将有助于更快地得到答案。 –