Hello,

I have a GraphicsLayoutWidget with two ImageItems overlayed. The bottom one 
is just a constant feed from a camera. Ocasionally, I capture a frame and 
overlay with some transparency using opacity option of setImage. This works 
without issue. However, I want to threshold this overlay at times, and 
after adding an alpha value the image is no longer displayed. Any help or 
insight would be appreciated. I've pasted below the relevant code. 

import numpy as np
import pyqtgraph as pg
from PyQt4 import QtGui, QtCore


class Frame(QtGui.QWidget):
    """
    Main frame.
    """
    def __init__(self):
        # a bunch of init stuff
        self.do_threshold = False
        self.overlay_opacity = 0.5

    def update_viewer(self, img_data):
        """
        Makes call to update image viewer.

        :param img_data: image data
        """
        self.image_viewer.update(img_data)

    def update_overlay(self, img_data_overlay):
        """
        Updates the overlay.

        :param img_data_overlay: image data of the overlay
        """
        if self.do_threshold:
            threshed = np.copy(img_data_overlay)
            threshed[threshed < self.overlay_threshold] = 0
            
            # make into RGBA
            threshed = np.dstack([threshed] * 3)
            alpha = np.full((threshed.shape[1], threshed.shape[0], 1), 0.5, 
np.uint8)
            # commenting out below line, so that it's RGB, makes it appear again
            threshed = np.concatenate([threshed, alpha], axis=2)

            self.image_viewer.update_overlay(threshed)

        else:
            self.image_viewer.update_overlay(img_data_overlay, 
overlay_opacity=self.overlay_opacity)


class ImageWidget(pg.GraphicsLayoutWidget, object):
    """
    Widget for the display from the camera.
    """
    def __init__(self, parent=None):
        super(ImageWidget, self).__init__(parent=parent)

        vb = self.addViewBox(row=1, col=1)

        self.viewer = pg.ImageItem()
        self.viewer_overlay = pg.ImageItem()

        vb.addItem(self.viewer)
        vb.addItem(self.viewer_overlay)
        
        # set overlay to always be on top
        self.viewer_overlay.setZValue(1)

        vb.setAspectLocked(True)

    def update(self, img_data):
        """
        Updates image

        :param img_data: image data
        """
        self.viewer.setImage(img_data, autoLevels=True)

    def update_overlay(self, img_data_overlay, overlay_opacity=None):
        """
        Updates overlay data

        :param img_data_overlay: image data of overlay
        :param overlay_opacity: transparency of the overlay
        """
        if overlay_opacity is not None:
            self.viewer_overlay.setImage(img_data_overlay, autoLevels=True, 
opacity=overlay_opacity)
        else:
            self.viewer_overlay.setImage(img_data_overlay, autoLevels=True)



-- 
You received this message because you are subscribed to the Google Groups 
"pyqtgraph" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/pyqtgraph/c8c6c124-cb85-43c1-9a15-5c4dde984b01%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to