Source code for draugr.drawers.mpl_drawers.image_stream_plot
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
__author__ = "Christian Heider Nielsen"
__doc__ = r"""
Created on 22-01-2021
"""
__all__ = ["ImageStreamPlot"]
from typing import Sequence
from matplotlib import pyplot
from draugr.drawers.mpl_drawers.mpldrawer import MplDrawer
from warg import passes_kws_to
[docs]class ImageStreamPlot(MplDrawer):
"""description"""
[docs] @passes_kws_to(MplDrawer.__init__)
@passes_kws_to(pyplot.imshow)
def __init__(
self, image, title: str = "", render: bool = True, **kwargs
): # size:Tuple[int,...],
super().__init__(render=render, **kwargs)
if not render:
return
self.fig = pyplot.figure(figsize=(4, 4))
self.im = pyplot.imshow(image, **kwargs)
pyplot.title(title)
pyplot.tight_layout()
cid = self.fig.canvas.mpl_connect("key_press_event", self.close)
def _draw(self, data: Sequence):
"""
:param data:
:return:"""
self.im.set_data(data)
[docs] @staticmethod
def close(event):
"""description"""
if event.key == "q":
pyplot.close(event.canvas.figure)
raise StopIteration
if __name__ == "__main__":
def asdasf() -> None:
"""
:rtype: None
"""
import cv2
from draugr.opencv_utilities import frame_generator
from draugr.tqdm_utilities import progress_bar
from functools import partial
from draugr.opencv_utilities import AsyncVideoStream
with AsyncVideoStream() as vc:
coder = partial(cv2.cvtColor, code=cv2.COLOR_BGR2RGB)
with ImageStreamPlot(coder(next(vc))) as s:
for i in progress_bar(
frame_generator(vc, coder=coder), auto_total_generator=False
):
s.draw(i)
asdasf()