class FilterLayout(BaseLayout): """Custom layout for filter effects This class implements a custom layout for applying diverse filter effects to a camera feed. The layout is based on an abstract base class BaseLayout. It displays the camera feed (passed to the class as a cv2.VideoCapture object) in the variable self.panels_vertical. Additional layout elements can be added by using the Add method (e.g., self.panels_vertical(wx.Panel(self, -1))). """ def _init_custom_layout(self): """Initializes image filter effects""" self.pencil_sketch = PencilSketch((self.imgWidth, self.imgHeight)) self.warm_filter = WarmingFilter() self.cool_filter = CoolingFilter() self.cartoonizer = Cartoonizer() def _create_custom_layout(self): """Layout showing a row of radio buttons below the camera feed""" # create a horizontal layout with all filter modes as radio buttons pnl = wx.Panel(self, -1) self.mode_warm = wx.RadioButton(pnl, -1, 'Warming Filter', (10, 10), style=wx.RB_GROUP) self.mode_cool = wx.RadioButton(pnl, -1, 'Cooling Filter', (10, 10)) self.mode_sketch = wx.RadioButton(pnl, -1, 'Pencil Sketch', (10, 10)) self.mode_cartoon = wx.RadioButton(pnl, -1, 'Cartoon', (10, 10)) hbox = wx.BoxSizer(wx.HORIZONTAL) hbox.Add(self.mode_warm, 1) hbox.Add(self.mode_cool, 1) hbox.Add(self.mode_sketch, 1) hbox.Add(self.mode_cartoon, 1) pnl.SetSizer(hbox) # add panel with radio buttons to existing panels in a vertical # arrangement self.panels_vertical.Add(pnl, flag=wx.EXPAND | wx.BOTTOM | wx.TOP, border=1) def _process_frame(self, frame_rgb): """Processes the current RGB camera frame :returns: The processed RGB frame to be displayed """ # choose filter effect based on radio buttons setting if self.mode_warm.GetValue(): frame = self.warm_filter.render(frame_rgb) elif self.mode_cool.GetValue(): frame = self.cool_filter.render(frame_rgb) elif self.mode_sketch.GetValue(): frame = self.pencil_sketch.render(frame_rgb) elif self.mode_cartoon.GetValue(): frame = self.cartoonizer.render(frame_rgb) return frame
def _init_custom_layout(self): """Initializes image filter effects""" self.pencil_sketch = PencilSketch((self.imgWidth, self.imgHeight)) self.warm_filter = WarmingFilter() self.cool_filter = CoolingFilter() self.cartoonizer = Cartoonizer()