Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Image 倍频程,通过套接字连接接收的显示图像不';不显示_Image_Sockets_Octave - Fatal编程技术网

Image 倍频程,通过套接字连接接收的显示图像不';不显示

Image 倍频程,通过套接字连接接收的显示图像不';不显示,image,sockets,octave,Image,Sockets,Octave,我有一个八度脚本,在其中我打开一个套接字服务器并从连接的客户端接收一些命令。这已经奏效了。现在我需要将数据发送到倍频程,主要是图像并对其进行处理。为了测试这一点,我想接收并显示一个灰度测试图像 bufflen = 4096; [data,count]=recv(b,bufflen); imshow (data) 图像窗口将打开,但为空。数据的大小正好是我发送的图像文件的大小。我还尝试用 imwrite (data, "test.jpg"); imshow test.jpg 这产生了一个文件

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

bufflen = 4096;
[data,count]=recv(b,bufflen);
imshow (data)
图像窗口将打开,但为空。数据的大小正好是我发送的图像文件的大小。我还尝试用

imwrite (data, "test.jpg");
imshow test.jpg
这产生了一个文件,但图像的每一行都在一条长线中。当我用

imwrite (data, "test.jpg");
imshow test.jpg
一切正常,图像窗口出现并显示图像

我通过netcat发送数据,带有

>ncat.exe 127.0.0.1 12346 < test.jpg
>ncat.exe 127.0.0.1 12346
这似乎是可行的,我可以将图像传输到另一台电脑上并在那里查看


非常感谢您的每一个提示或提示。

因为您没有提供太多信息,所以在这里进行猜测,但听起来您的数据是以向量的形式出现的,您需要将其重塑为
imshow

>> newdata = reshape(data, 64, 64)
您还没有向我们展示输入数据的示例,所以您的数据也可能是字符串,而图像数组需要是数值。要在重塑之前进行验证,可以运行:

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

见:


您正在将jpeg作为字节流发送(
ncat.exe 127.0.0.1 12346
),但您正在尝试使用
imshow
显示is,因为它将是未压缩的RGB、灰度或索引图像。您可以接收它并将其保存到tempfile,然后使用imread加载它。在这种情况下,graphics/image magick将对您执行从JPE到RGB的解压缩。

如果您需要调试代码的帮助,您必须创建一个示例,该示例可以由试图帮助您的人运行。请参阅,您甚至没有提到用于套接字连接的octave软件包…我在win7上使用octave 4.2.1和新的内置套接字软件包。这不起作用,我遇到错误:重塑:无法将1x1918阵列重塑为512x512阵列。确切数字可能不正确。但问题是,至少我认为,倍频程不理解它是一个图像,而是把它当作原始的输入信号。倍频程中的图像只是一个数字数组。如何将1x1918阵列转换为512x512?如果它真的是512x512,那么应该有512x512=262144个值。你说你的缓冲区长度是4096,所以我猜你期望的是64x64灰度图像(64x64=4096像素,每个像素都是整数)。问题是您当前没有图像。你有一个数据流,需要把它转换回一个图像数组。是的,如果您发送的是二进制jpeg,那就是问题所在。正如Andy在第一次评论中所说,在你的问题中提供更好的细节将有助于更快地得到答案。但现在我有一个问题,似乎倍频程套接字recv上的输入缓冲区不能大于4608字节。有什么想法吗?简,我还回答了你在帮助邮件列表上的另一个与套接字相关的问题。没有“4608字节”限制,代码中很可能存在问题。请使用MCVE创建一个新问题。请添加使用过的操作系统、倍频程版本和使用过的套接字包和版本