Advertisement
Guest User

dearpygui cv2 gui

a guest
Feb 28th, 2022
472
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 3.67 KB | None | 0 0
  1. import dearpygui.dearpygui as dpg
  2. import cv2 as cv
  3. import numpy as np
  4.  
  5. def flat_img(mat):
  6.     return np.true_divide(np.asfarray(np.ravel(np.flip(mat,2)), dtype='f'), 255.0)
  7.  
  8. #full size image
  9. _img = cv.imread('./test.jpg')
  10. _imgdata = flat_img(_img)
  11. #temp copy
  12. _timg = _img.copy()
  13.  
  14. win_dimensions = [600, 600]
  15. gbool = False
  16. hbool = False
  17.  
  18. def fit_image(img, dimensions):
  19.     img_dim = np.flip(img.shape[:-1])
  20.     scale = 1
  21.     if (dimensions[0] <= dimensions[1]):
  22.         scale = dimensions[0]/img_dim[0]
  23.     else: scale = dimensions[1]/img_dim[1]
  24.     img_dim[0]*=scale
  25.     img_dim[1]*=scale
  26.     return cv.resize(img, img_dim) 
  27.  
  28. # update texture with new dimension using cv2
  29. # configure_item on add_image to scale causes crashes
  30. def resize_window_img(wintag, textag, dimensions, mat):
  31.     img = fit_image(mat, dimensions)
  32.     imgdata = flat_img(img)
  33.     # delete texture/image, re-add
  34.     dpg.delete_item(wintag, children_only=True)
  35.     dpg.delete_item(textag)
  36.     with dpg.texture_registry(show=False):     
  37.         dpg.add_raw_texture(img.shape[1], img.shape[0], imgdata, tag=textag, format=dpg.mvFormat_Float_rgb)
  38.         dpg.add_image(textag, parent=wintag)
  39.  
  40. def update_preview(mat):
  41.     img = fit_image(mat, win_dimensions)   
  42.     imgdata = flat_img(img)
  43.     dpg.set_value("tex_tag", imgdata)
  44.  
  45. def gaussian(img, k, s):
  46.     k = int(k)
  47.     k = k if (k%2 != 0) else k+1   
  48.     return cv.GaussianBlur(img, (k,k), s, 0, cv.BORDER_DEFAULT)
  49.  
  50. def shift_hue(mat, val):
  51.     hsv = cv.cvtColor(mat, cv.COLOR_BGR2HSV)
  52.     h, s, v = cv.split(hsv)
  53.     shift_h = (h+int(val*180))%255
  54.     shift_hsv = cv.merge([shift_h, s, v])
  55.     return cv.cvtColor(shift_hsv, cv.COLOR_HSV2BGR)
  56.  
  57. def handle_edit(tag):
  58.     global _img, _timg
  59.     mat = _img.copy()
  60.     if(gbool):
  61.         mat = gaussian(mat, dpg.get_value("gbar_k"), dpg.get_value("gbar_s"))
  62.     if(hbool):
  63.         mat = shift_hue(mat, dpg.get_value("hbar"))
  64.  
  65.     _timg = mat
  66.     update_preview(mat)
  67.  
  68. def afteredit_cb(sender, data):
  69.     handle_edit(data)
  70.  
  71. def box_cb(sender, data):
  72.     global gbool, hbool, dbool
  73.     if(sender == "gbox"):
  74.         gbool = data
  75.     elif(sender == "hbox"):
  76.         hbool = data
  77.     elif(sender == "dbox"):
  78.         dbool = data
  79.     handle_edit(sender)
  80.  
  81. def viewport_resize_cb(sender, data):
  82.     win_dimensions[0] = data[2:][0]
  83.     win_dimensions[1] = data[2:][1]
  84.     resize_window_img("img_window", "tex_tag", win_dimensions, _timg)
  85.  
  86. dpg.create_context()
  87. dpg.create_viewport(title='img gui', width=win_dimensions[0], height=win_dimensions[1])
  88.  
  89. with dpg.item_handler_registry(tag="float handler") as handler:
  90.     dpg.add_item_deactivated_after_edit_handler(callback=afteredit_cb)
  91.  
  92. with dpg.texture_registry(show=False)
  93.     dpg.add_raw_texture(_img.shape[1], _img.shape[0], _imgdata, tag="tex_tag", format=dpg.mvFormat_Float_rgb)
  94.  
  95. with dpg.window(tag="img_window"):
  96.     dpg.add_image("tex_tag")
  97.     dpg.set_primary_window("img_window", True)
  98.  
  99. with dpg.window(tag="ctlwindow", label="", no_close=True, min_size=(200,250)):
  100.     with dpg.collapsing_header(label="gaussian_blur", tag="gmenu", default_open=True):
  101.         dpg.add_checkbox(label="on", tag="gbox", callback=box_cb)
  102.         dpg.add_slider_float(label="ksize", tag="gbar_k", default_value=0.,  max_value=21)
  103.         dpg.add_slider_float(label="sigma", tag="gbar_s", default_value=0.,  max_value=6)
  104.     with dpg.collapsing_header(label="hue", tag="hmenu", default_open=True):
  105.         dpg.add_checkbox(label="on", tag="hbox", callback=box_cb)
  106.         dpg.add_slider_float(label="shift", tag="hbar", default_value=0., max_value=1)
  107.  
  108. dpg.setup_dearpygui()
  109. dpg.show_viewport()
  110. dpg.bind_item_handler_registry("gbar_k", "float handler")
  111. dpg.bind_item_handler_registry("gbar_s", "float handler")
  112. dpg.bind_item_handler_registry("hbar", "float handler")
  113. dpg.set_viewport_resize_callback(viewport_resize_cb)
  114. dpg.start_dearpygui()
  115. dpg.destroy_context()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement