2016-06-16 6 views
2

파이썬 2.7과 OpenCV 2.4를 사용하고 있습니다. 나는 원격 기계에서 이미지를 읽고 보여주고 싶다. 그런 다음 라이브러리를 사용하려고합니다. paramiko. 그러나 파일을 읽을 수 없습니다.파이썬 ssh 읽기 이미지

여기 내 코드입니다. 첫째, 모든 라이브러리와 설정 연결을 가져옵니다

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