Skip to content
This repository was archived by the owner on Feb 21, 2021. It is now read-only.
Merged
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -19,3 +19,6 @@ src/interfaces/python/
# Python
__pycache__/
*.py[cod]
/build/

src/tools/colorTuner_py/build/
4 changes: 3 additions & 1 deletion src/tools/colorTuner_py/filters/hsvFilter.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
import numpy as np

'''Max Values supported by OpenCV'''
HSVMAX = (180,255,255)
HSVMAX = (359,255,255)
HSVMIN = (0,0,0)


Expand Down Expand Up @@ -61,6 +61,8 @@ def apply (self, img):
mask = None
res = None

hup=hup//2
hdwn=hdwn//2
if hdwn <= hup:
# http://docs.opencv.org/3.0-beta/doc/py_tutorials/py_imgproc/py_colorspaces/py_colorspaces.html
minValues = np.array([hdwn,sdwn,vdwn],dtype=np.uint8)
Expand Down
63 changes: 53 additions & 10 deletions src/tools/colorTuner_py/gui/controlWidget.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,18 +17,19 @@
# Alberto Martin Florido <almartinflorido@gmail.com>
#

from PyQt5.QtCore import pyqtSignal, Qt
from PyQt5.QtWidgets import QWidget, QLabel, QRadioButton, QGridLayout, QVBoxLayout, QHBoxLayout, QSpacerItem, QSizePolicy, QSlider, QTextEdit, QLineEdit
from PyQt5.QtCore import pyqtSignal, Qt,QRect
from PyQt5.QtWidgets import QWidget, QLabel, QRadioButton, QGridLayout, QVBoxLayout, QHBoxLayout, QSpacerItem, QSizePolicy, QSlider, QTextEdit, QLineEdit,QCheckBox
from PyQt5.QtGui import QIntValidator
from PyQt5 import QtWidgets
from filters.hsvFilter import HSVMAX, HSVMIN
from filters.rgbFilter import RGBMAX, RGBMIN
from filters.yuvFilter import YUVMAX, YUVMIN

from hsvWidget import HsvWidget
WIDTH = 1340
HEIGTH = 200

class ControlWidget(QWidget):

updatehsv_disc=pyqtSignal()

def __init__(self,winParent):
super(ControlWidget, self).__init__()
Expand All @@ -40,6 +41,8 @@ def __init__(self,winParent):
self.hsvup = list(HSVMAX)
self.yuvdwn = list(YUVMIN)
self.yuvup = list(YUVMAX)
self.hsvWidget=HsvWidget(self)
self.updatehsv_disc.connect(self.updatecolordisc)
self.initUI()

def initUI(self):
Expand All @@ -52,6 +55,10 @@ def initUI(self):
self.rgbButton = QRadioButton("RGB")
self.hsvButton = QRadioButton("HSV")
self.yuvButton = QRadioButton("YUV")
'''HSV status scheck'''
self.hsvCheck = QCheckBox('HSV Color Disc')
self.hsvCheck.setObjectName("hsvCheck")
self.hsvCheck.stateChanged.connect(self.showHSVWidget)

'''Signals for toggled radio buttons'''
self.origButton.toggled.connect(lambda:self.origButtonState())
Expand All @@ -75,7 +82,7 @@ def initUI(self):
self.radio1Layout.addWidget(self.rgbButton)
self.radio1Layout.addWidget(self.hsvButton)
self.radio1Layout.addWidget(self.yuvButton)

self.radio1Layout.addWidget(self.hsvCheck)
#self.radio1Layout.addLayout(self.radio2Layout)
#self.radio1Layout.addLayout(self.radio3Layout)
self.radioLayout.addLayout(self.radio1Layout)
Expand Down Expand Up @@ -212,16 +219,23 @@ def initUI(self):
self.smaxValue.textChanged.connect(self.changeSmax2)
self.vminValue.textChanged.connect(self.changeVmin2)
self.vmaxValue.textChanged.connect(self.changeVmax2)



#Show filtered image. Don't manually disable radio button, API does it for you!
'''Methods for showing images depending on the current checked radio button'''
def origButtonState(self):
if self.origButton.isChecked():
self.winParent.setFilterName('Orig')


def updatecolordisc(self):
self.hsvWidget.hsvUpdate.emit()
def showHSVWidget(self,state):
if state == Qt.Checked:
self.hsvWidget.show()
else:
self.hsvWidget.close()
def closeHSVWidget(self):
self.hsvCheck.setChecked(False)
def rgbButtonState(self):
if self.rgbButton.isChecked():
self.winParent.setFilterName('RGB')
Expand Down Expand Up @@ -379,6 +393,7 @@ def yuvButtonState(self):
self.vmaxSlider.setMaximum(vmax)
self.vmaxSlider.setValue(vu)


'''Methods to get the slider value and update value labels'''
def changeHmin(self):
value = self.hminSlider.value()
Expand All @@ -391,6 +406,7 @@ def changeHmin(self):
self.yuvdwn[0] = value
self.hminValue.setText(str(value))
self.setMIN()
self.updatecolordisc()

def changeHmin2(self):
v = self.hminValue.text()
Expand All @@ -407,6 +423,7 @@ def changeHmin2(self):
self.yuvdwn[0] = value
self.hminSlider.setValue(value)
self.setMIN()
self.updatecolordisc()

def changeHmax(self):
value = self.hmaxSlider.value()
Expand All @@ -419,6 +436,7 @@ def changeHmax(self):

self.hmaxValue.setText(str(value))
self.setMAX()
self.updatecolordisc()

def changeHmax2(self):
v = self.hmaxValue.text()
Expand All @@ -435,6 +453,8 @@ def changeHmax2(self):
self.yuvup[0] = value
self.hmaxSlider.setValue(value)
self.setMAX()
self.updatecolordisc()


def changeSmin(self):
value = self.sminSlider.value()
Expand All @@ -447,6 +467,8 @@ def changeSmin(self):

self.sminValue.setText(str(value))
self.setMIN()
self.updatecolordisc()


def changeSmin2(self):
v = self.sminValue.text()
Expand All @@ -463,6 +485,8 @@ def changeSmin2(self):
self.yuvdwn[1] = value
self.sminSlider.setValue(value)
self.setMIN()
self.updatecolordisc()


def changeSmax(self):
value = self.smaxSlider.value()
Expand All @@ -475,6 +499,8 @@ def changeSmax(self):

self.smaxValue.setText(str(value))
self.setMAX()
self.updatecolordisc()


def changeSmax2(self):
v = self.smaxValue.text()
Expand All @@ -491,6 +517,8 @@ def changeSmax2(self):
self.yuvup[1] = value
self.smaxSlider.setValue(value)
self.setMAX()
self.updatecolordisc()


def changeVmin(self):
value = self.vminSlider.value()
Expand Down Expand Up @@ -573,8 +601,23 @@ def setMIN (self):
elif self.yuvButton.isChecked():
h, s, v = self.yuvdwn
self.winParent.getCamera().getFilter(filt).setDownLimit(h,s,v)


'''Method for updating slider values'''
def updateSlider(self,hue_min,hue_max,sat_min,sat_max):
if self.hsvButton.isChecked():
self.hsvdwn[0]=hue_min
self.hsvup[0]=hue_max
self.hsvdwn[1]=sat_min
self.hsvup[1]=sat_max
self.hminValue.setText(str(hue_min))
self.hminSlider.setValue(hue_min)
self.hmaxValue.setText(str(hue_max))
self.hmaxSlider.setValue(hue_max)
self.sminValue.setText(str(sat_min))
self.sminSlider.setValue(sat_min)
self.smaxValue.setText(str(sat_max))
self.smaxSlider.setValue(sat_max)
self.setMAX()
self.setMIN()

'''Close event, for finalize the program'''
def closeEvent(self, event):
Expand Down
13 changes: 7 additions & 6 deletions src/tools/colorTuner_py/gui/gui.py
Original file line number Diff line number Diff line change
Expand Up @@ -95,9 +95,9 @@ def __init__(self, parent=None):

#self.setMaximumSize(800,600)

centralWidget = QWidget(self)
self.centralWidget = QWidget(self)
mainLayout = QGridLayout()
centralWidget.setLayout(mainLayout)
self.centralWidget.setLayout(mainLayout)

imagesLayout = QVBoxLayout(self)
controlLayout = QVBoxLayout(self)
Expand Down Expand Up @@ -148,9 +148,9 @@ def __init__(self, parent=None):
zoompixGroupBox.setLayout(grid3)

slidersGroupBox = QGroupBox("Filter setup")
controlWidget = ControlWidget(self)
self.controlWidget = ControlWidget(self)
grid4 = QGridLayout()
grid4.addWidget(controlWidget)
grid4.addWidget(self.controlWidget)
slidersGroupBox.setLayout(grid4)


Expand Down Expand Up @@ -186,7 +186,7 @@ def __init__(self, parent=None):
mainLayout.addWidget(self.pixel,1,1)
mainLayout.addWidget(self.rgbVal,1,0,1,1)'''

self.setCentralWidget(centralWidget)
self.setCentralWidget(self.centralWidget)

self.updGUI.connect(self.updateGUI)

Expand Down Expand Up @@ -249,7 +249,8 @@ def setFilterName(self,filt):
self.filt = filt

def closeEvent(self, event):
self.camera.stop()
self.camera.stop()
self.controlWidget.closeHSVWidget()
event.accept()


Expand Down
Loading