八度,套接字连接接收到的显示图像不显示

Octave, display image received by socket connection does't show

我有一个 Octave 脚本,我在其中打开套接字服务器并从连接的客户端接收一些命令。这已经有效。现在我需要将数据发送到 Octave,主要是图像并处理它们。为了对此进行测试,我想接收并显示灰度测试图像。

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

图像 window 打开但它是空的。数据的大小正好是我发送的图像文件的大小。我还尝试用

保存图像
imwrite (data, "test.jpg");

这生成了一个文件,但图像的每一行都在一个长行中。当我用

打开图像时
imshow test.jpg

一切正常,图像 window 出现并显示图像。

我正在使用

通过 netcat 发送数据
>ncat.exe 127.0.0.1 12346 < test.jpg

这似乎有效,我能够将图像传输到另一台电脑并在那里查看。

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

这里猜测是因为您没有提供太多信息,但听起来您的数据是以矢量形式出现的,您需要将其重新整形为数组 imshow

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

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

>> class(data)

如果是这样,您需要将其转换为数值数组。您可以为此使用 str2num,但具体如何操作将取决于字符串的外观、是否有值分隔符等。

参见:

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

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