Answer the question
In order to leave comments, you need to log in
How to display video stream from webcam in QGraphicsView in python?
Good afternoon, sorry for the stupid question... I just can't figure out how to display video from a webcam not in a separate window, but in QGraphicsView (or similar)
There is a form made in Qt Designer, the program is written in Python, the video stream is taken from the web -cameras via opencv. When I run the program, a separate window of the video stream (opencv) is naturally launched, after pressing Esc, the form window is launched. There is a QGraphicsView on the form, how to start up the video stream not in a separate window, but in it .... I try to display a third-party image through it - nothing happens either. I suspect that the solution is very simple, but the lack of knowledge does not even allow me to correctly ask the query in Google ... I would be grateful for any constructive tips.
Here is my code:
#!/usr/bin/python
# coding=utf-8
from PyQt4 import QtCore, QtGui
from Webcam import Ui_MainWindow
import sys, cv, cv2
capture = cv.CaptureFromCAM(-1)
class Web(QtGui.QMainWindow, Ui_MainWindow):
def __init__(self, parent=None):
QtGui.QMainWindow.__init__(self, parent)
self.setupUi(self)
self.graphicsView.setBackgroundBrush(QtGui.QBrush(QtGui.QPixmap("1.png")))
#вывод рисунка не работает
while True:
img = cv.QueryFrame(capture)
cv.ShowImage("WEB-camera", img)
if cv.WaitKey(10) == 27:
break
cv.DestroyWindow("WEB-camera")
if __name__ == '__main__':
app = QtGui.QApplication(sys.argv)
MainApp = Web()
MainApp.show()
sys.exit(app.exec_())
Answer the question
In order to leave comments, you need to log in
Понятия не имею, как работает opencv. Но пару советов, которые могут помочь дам:
1) Для graphics view нужна сцена doc.qt.io/qt-5/qgraphicsscene.html. Не забудьте установить сцену в конструкторе формы.
2) На сцену можно добавлять как виджеты, так и рисунки. Например, метод addPixmap может подойти.
3) В вашем варианте img = cv.QueryFrame(capture) вероятно рисунок, какого-то типа (не знаю какого). Самый примитивный вариант -- каждый раз брать рисунок и добавлять на сцену, предварительно её очистив. Это очень грубо, и скорее всего в документации есть способы получше. По крайней мере, программа сейчас в бесконечном цикле берёт кадры через определённые промежутки времени и рисует их где-то, т.е. работает примерно так, как я и описал.
4) Вот эта строчка cv.ShowImage("WEB-camera", img) похоже создаёт окно (возможно с какими-то элементами управления). Возможно отсюда как-то можно получить окно или указать другой источник вывода... Хотя, в принципе у нас уже есть сам рисунок из пункта 3 и больше ничего особо и не надо -- запускайте в отдельном потоке и все дела.
Didn't find what you were looking for?
Ask your questionAsk a Question
731 491 924 answers to any question