Ask Your Question

Revision history [back]

Memory leak while using cv2.VideoCapture()

I am trying to video stream from a 1920x1080 HD camera with 60fps,using opencv. I am losing 6GB of my memory within the first minute of streaming. Any guidelines on how to fix this issue. I am using Python 3.4.4, Opencv 3.1.0, Pycharm Community edition and Pyside to generate the GUI

from PySide.QtCore import *
   from PySide.QtGui import *
   import cv2
   import sys
class MainApp(QWidget):
  def __init__(self):
    QWidget.__init__(self)
    self.video_size = QSize(1920, 1080)
    self.setup_ui()
    self.setup_camera()
def setup_ui(self):
    """Initialize widgets.
    """
    self.image_label = QLabel()
    self.image_label.setFixedSize(self.video_size)

    self.quit_button = QPushButton("Quit")
    self.quit_button.clicked.connect(self.close)

    self.main_layout = QVBoxLayout()
    self.main_layout.addWidget(self.image_label)
    self.main_layout.addWidget(self.quit_button)

    self.setLayout(self.main_layout)

def setup_camera(self):
    """Initialize camera.
    """
    self.capture = cv2.VideoCapture(0)
    self.capture.set(cv2.CAP_PROP_FRAME_WIDTH, self.video_size.width())
    self.capture.set(cv2.CAP_PROP_FRAME_HEIGHT, self.video_size.height())

    self.timer = QTimer()
    self.timer.timeout.connect(self.display_video_stream)
    self.timer.start(30)

def display_video_stream(self):
    """Read frame from camera and repaint QLabel widget.
    """
    _, frame = self.capture.read()
    frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
    image = QImage(frame, frame.shape[1], frame.shape[0],
               frame.strides[0], QImage.Format_RGB888)
    self.image_label.setPixmap(QPixmap.fromImage(image))

if __name__ == "__main__":
    app = QApplication(sys.argv)
    win = MainApp()
    win.show()
    sys.exit(app.exec_())