Отображение нескольких потоков изображений одновременно с многопоточностью и OpenCV imshow () - PullRequest
1 голос
/ 13 марта 2019

У меня есть несколько потоков (по одному для каждой камеры), которым нужно imshow изображения. Однако я сталкиваюсь с ошибкой со второй командой NamedWindow. Я прочитал некоторые из предыдущих Q / A и понял, что highgui и многопоточность не слишком хорошо сочетаются, однако в этом случае мне нужно запустить его из потока. Я в порядке с отображением одного из потоков изображений (и затем нажмите кнопку, чтобы перейти к следующему).

Я не слишком склонен объединять изображения вместе и передавать их в основной поток (где, как кажется, большинство людей предлагают поддерживать высокие графические вызовы), поскольку я не хочу использовать больше ресурсов, чем нужно.

Более того, imshow в отдельном потоке у меня нормально работает (для одной камеры). Я попытался запустить отдельные программы в разных оболочках (не в потоках, а в этот раз процессы), и это, похоже, сработало - есть ли способ создать отдельный процесс в OpenCV для одновременного отображения потоков изображений? Можно ли показывать несколько потоков изображений в разных потоках?

1 Ответ

0 голосов
/ 14 марта 2019

Одним из способов одновременного отображения нескольких потоков изображений является создание отдельных объектов, каждый из которых имеет свой собственный поток, опрашивающий изображения с другой камеры. Затем вы можете сшить эти изображения в одну панель для отображения всех кадров. Одна imshow панель может быть использована для отображения этих кадров после захвата кадра камеры каждого потока. Простая панель с 4 кадрами камеры:

4 panel camera frame

Код панели:

import cv2
import numpy as np

image = cv2.imread('placeholder5.PNG')

# Note all frames must be of the same size
image = cv2.resize(image, (0, 0), None, .4, .4)

grey = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
grey_3_channel = cv2.cvtColor(grey, cv2.COLOR_GRAY2BGR)

numpy_horizontal_row1 = np.hstack((image, grey_3_channel))
numpy_horizontal_row2 = np.hstack((grey_3_channel, image))

combined_images = np.concatenate((numpy_horizontal_row1, numpy_horizontal_row2), axis=0)

cv2.imshow('Image panel', combined_images)
cv2.waitKey()

Например, у меня есть одна imshow панель для отображения 4 разных камер, каждая из которых имеет свой собственный поток для опроса кадров.

Camera example with 4 frames

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...