2016-06-16 7 views
2

私はPython 2.7とOpenCV 2.4を使用しています。リモートマシンから画像を読み込んで表示したい。次に、ライブラリを使用しようとしましたparamiko。しかし、私はファイルを読むことができません。Python ssh read image

ここに私のコードです。まず、私はすべてのライブラリとセットアップ接続インポート:

import paramiko 
import cv2 
s = paramiko.SSHClient() 
s.set_missing_host_key_policy(paramiko.AutoAddPolicy()) 
s.connect("XXX.XXX.XXX",22,username="NAME",password='PW',timeout=4) 

第二に、私はSFTPセッションを開き、ターゲット画像を開きます。

sftp = s.open_sftp() 
remote_file = sftp.open('/home/frame/image.jpg') 

私はremote_fileを印刷しよう:print remote_file

それ返信**paramiko.sftp_file.SFTPFile object at 0x000000000572AC50**

最後に、画像を読み込んで表示しようとしています。

img = cv2.imread(remote_file) 
cv2.imshow("image", img) 

しかし、エラーが出てくる:

File "ssh.py", line 25, in <module> 
    img = cv2.imread(remote_file) 
TypeError: expected string or Unicode object, SFTPFile found 

_________________________________________________________________________-

私は別のリモートマシンから画像を読み取ることができますどのように助けを求めています。私のやり方は正しいの?ありがとうございました。ここで

+2

は、なぜあなたは(ファイルへのパスを受け入れる) 'imread'は' SFTPFile'型のオブジェクトで動作することを期待していますか? 'SFTPFile'からバイナリファイルを取り出し、' imdecode'を使用することをお勧めします。 – Miki

+0

@Mikiあなたの返事をありがとう。 'SFTPFile'からバイナリファイル(または文字列)をどのように取得できますか? – VICTOR

答えて

2

ソリューション:

import numpy as np 

... 

sftp = s.open_sftp() 
with sftp.open('/home/frame/image.jpg') as f: 
    img = cv2.imdecode(np.fromstring(f.read(), np.uint8), 1) 

cv2.imshow("image", img) 
cv2.waitKey(0) 
+0

これは動作します!!!!!!!!!!!!!ありがとう、スターン! – VICTOR