Source code for QVideo.demos.filterdemo

#!/usr/bin/env python3
'''Demo combining a live video feed, camera controls, and an image-filter bank.

Run directly::

    python -m QVideo.demos.filterdemo
'''

from QVideo.demos.demo import Demo
from QVideo.lib import QCameraTree


__all__ = ['FilterDemo']


[docs] class FilterDemo(Demo): '''Extends :class:`~QVideo.demos.demo.Demo` with an image-filter bank. Adds a :class:`~QVideo.lib.QFilterBank.QFilterBank` panel below the camera control tree so that image-processing filters can be toggled and adjusted alongside the live feed. Parameters ---------- cameraTree : QCameraTree The camera control tree widget to display alongside the video feed. filters : list[str] Names of filter classes to register from :mod:`QVideo.filters`. **kwargs : Additional keyword arguments forwarded to :class:`~QVideo.demos.demo.Demo`. ''' def __init__(self, cameraTree: QCameraTree, filters: list[str], **kwargs) -> None: super().__init__(cameraTree, **kwargs) self.addFilters(filters)
[docs] def addFilters(self, filters: list[str]) -> None: '''Register filters by name and show the filter bank. Parameters ---------- filters : list[str] Names of filter classes to register from :mod:`QVideo.filters`. ''' for name in filters: self.screen.filter.registerByName(name) self._controls.addWidget(self.screen.filter) self.screen.filter.setVisible(True)
def main() -> None: # pragma: no cover '''Launch the filter demo with an interactively chosen camera.''' import pyqtgraph as pg from QVideo.lib import choose_camera pg.mkQApp('Filter Demo') camera = choose_camera().start() filters = '''QRGBFilter QSmoothingFilter QSampleHold QThresholdFilter QBlobFilter QEdgeFilter'''.split() widget = FilterDemo(camera, filters) widget.show() pg.exec() if __name__ == '__main__': # pragma: no cover main()