Я подключен к ssh-серверу с помощью ssh -Y username @ adress. На сервере я запускаю python2.7 с помощью IDLE. Если я использую matplotlib, я могу видеть графики результатов на клиенте. Это говорит о том, что с графической пересылкой проблем нет. Однако, когда я использую OpenCV:

cv2.imshow('img_final', img_final)
cv2.waitKey(0)
cv2.destroyAllWindows()

Он открывается и показывает изображение на экране ssh-сервера, а не на клиентском ssh-компьютере.

Я провел поиск и исследование, и в ответ на типичное устранение неполадок: - На моем компьютере, на котором запущен client-ssh, echo $ DISPLAY отвечает: 0. Он запускает xterm. -На моем ssh-сервере мой файл sshd_config в порядке (X11Forwarding да). echo $ DISPLAY показывает localhost: 10.0.

Более того, я могу использовать программу просмотра изображений, такую как «feh», и без проблем показывать изображения на клиенте.

Я не думаю, что у меня проблема с конфигурацией, потому что сервер может отображать графику на клиенте.

Есть ли способ выполнять сценарии python на сервере и показывать изображения результатов из OpenCV непосредственно на клиенте (как это делает MAtplotlib)?

Благодарность

4
stram hp 2 Янв 2018 в 06:46

2 ответа

Лучший ответ

Хорошо, я не могу ответить, почему вы не можете туннелировать свои изображения openCV через ssh. Я думаю, это потому, что они основаны не на X11, а на QT ...

Однако, если вы конвертируете массивы numpy (из ваших изображений OpenCV) в реальные изображения RGB, вы сможете отображать их с помощью image.show ():

import cv2
from PIL import Image

img=cv2.imread('image.jpg',1)
#instead of using:
#cv2.imshow('image', img)
#cv2.waitKey(0)

#you can use:
img2 = Image.fromarray(img, 'RGB')
img2.show()

Это должно работать через ssh -Y

4
daniel 2 Янв 2018 в 04:52

Если это полезно для вас, вы можете сделать что-то вроде непрерывного захвата, но с сохранением каждого кадра как изображения:

    def deferred_init(self):
        self.total_frames = 200
        for i in range(self.total_frames):
            self.stream = self.camera.capture_sequence(
                ['image%02d.jpg' % i]
                )
        return self.stream

(Этот фрагмент был в объекте, отсюда self.x) Предполагается, что у вас есть camera = PiCamera и обычная инициализация. В любом случае, однажды вызванный: а) ваш рабочий каталог будет загроможден (рекомендуется делать запись в другую папку) и б) вы можете просматривать свои изображения из ssh любым удобным для вас способом. Таким образом проверяется, работает ли захват, но также можно просматривать через ssh.

1
inmanl 9 Авг 2018 в 23:39