Source code for QVideo.filters.invert

'''Intensity-inversion filter and companion Qt widget.'''
from qtpy import QtWidgets
from QVideo.lib.QVideoFilter import VideoFilter, QVideoFilter
from QVideo.lib.videotypes import Image
import cv2


__all__ = ['InvertFilter', 'QInvertFilter']


[docs] class InvertFilter(VideoFilter): '''Inverts pixel intensities: black becomes white and vice versa. Applies ``255 - pixel`` to every channel of every pixel, turning a black-on-white image into white-on-black (and back again). Has no parameters. '''
[docs] def get(self) -> Image | None: '''Return the intensity-inverted frame. Returns ------- Image or None Inverted uint8 image, or ``None`` if no frame has been added. ''' if self.data is None: return None return cv2.bitwise_not(self.data)
[docs] def to_code(self) -> 'FilterCode': from QVideo.lib.QVideoFilter import FilterCode return FilterCode( imports=frozenset({'import cv2'}), lines=['image = cv2.bitwise_not(image)'], comment='intensity inversion', )
[docs] class QInvertFilter(QVideoFilter): '''Widget for :class:`InvertFilter`. Parameters ---------- parent : QtWidgets.QWidget or None Parent widget. ''' display_name = 'Invert' display_category = 'Preprocessing' def __init__(self, parent: QtWidgets.QWidget | None = None) -> None: super().__init__(parent, 'Invert', InvertFilter())
if __name__ == '__main__': # pragma: no cover QInvertFilter.example()