2017-05-17 36 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在他的第一條評論中所說的那樣,在你的問題中提供更好的細節將有助於更快地得到答案。 –