Skip to content
This repository was archived by the owner on Feb 21, 2021. It is now read-only.
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions src/tools/colorTuner_py/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,8 @@ install(
INSTALL(FILES colorTuner.py DESTINATION share/jderobot/python/colorTuner_py/ COMPONENT colortuner-python)
INSTALL(FILES resources_rc.py DESTINATION share/jderobot/python/colorTuner_py/ COMPONENT colortuner-python)

INSTALL(FILES resources/HLSColorSpace.png DESTINATION share/jderobot/python/colorTuner_py/resources/HLSColorSpace.png COMPONENT colortuner-python)

# Install gui
INSTALL (DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/gui DESTINATION share/jderobot/python/colorTuner_py COMPONENT colortuner-python PATTERN .svn EXCLUDE)

Expand Down
35 changes: 26 additions & 9 deletions 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 = (179,255,255)
HSVMAX = (180,255,255)
HSVMIN = (0,0,0)


Expand Down Expand Up @@ -58,14 +58,31 @@ def apply (self, img):
hdwn,sdwn,vdwn = self.getDownLimit()

hsv = cv2.cvtColor(img, cv2.COLOR_RGB2HSV)

# 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)
maxValues = np.array([hup,sup,vup], dtype=np.uint8)

mask = cv2.inRange(hsv, minValues, maxValues)

res = cv2.bitwise_and(img,img, mask= mask)
mask = None
res = None

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)
maxValues = np.array([hup,sup,vup], dtype=np.uint8)

mask = cv2.inRange(hsv, minValues, maxValues)
res = cv2.bitwise_and(img,img, mask= mask)
else:
# http://docs.opencv.org/3.0-beta/doc/py_tutorials/py_imgproc/py_colorspaces/py_colorspaces.html
# red goes from 240 to 20 degreess aprox
maxValues1 = np.array([hup,sup,vup],dtype=np.uint8)
minValues1 = np.array([0,sdwn,vdwn],dtype=np.uint8)
maxValues2 = np.array([180,sup,vup], dtype=np.uint8)
minValues2 = np.array([hdwn,sdwn,vdwn],dtype=np.uint8)

mask1 = cv2.inRange(hsv, minValues1, maxValues1)
mask2 = cv2.inRange(hsv, minValues2, maxValues2)

r1 = cv2.bitwise_and(img,img, mask= mask1)
r2 = cv2.bitwise_and(img,img, mask= mask2)
res = cv2.bitwise_or(r1, r2)



return res
19 changes: 13 additions & 6 deletions src/tools/colorTuner_py/gui/controlWidget.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@
#

from PyQt5.QtCore import pyqtSignal, Qt
from PyQt5.QtWidgets import QWidget, QLabel, QRadioButton, QGridLayout, QVBoxLayout, QSpacerItem, QSizePolicy, QSlider, QTextEdit, QLineEdit
from PyQt5.QtWidgets import QWidget, QLabel, QRadioButton, QGridLayout, QVBoxLayout, QHBoxLayout, QSpacerItem, QSizePolicy, QSlider, QTextEdit, QLineEdit
from PyQt5.QtGui import QIntValidator
from filters.hsvFilter import HSVMAX, HSVMIN
from filters.rgbFilter import RGBMAX, RGBMIN
Expand Down Expand Up @@ -66,13 +66,20 @@ def initUI(self):
self.gLayout.setObjectName("gLayout")

''' Vertical Layout for radio buttons '''
self.radio1Layout = QHBoxLayout()
self.radio2Layout = QVBoxLayout()
self.radio3Layout = QVBoxLayout()
self.radioLayout = QVBoxLayout()
self.radioLayout.setObjectName("radioLayout")
self.radioLayout.addWidget(self.origButton)
self.radioLayout.addWidget(self.rgbButton)
self.radioLayout.addWidget(self.hsvButton)
self.radioLayout.addWidget(self.yuvButton)
self.vSpacer = QSpacerItem(30, 20, QSizePolicy.Ignored, QSizePolicy.Ignored);
self.radio1Layout.addWidget(self.origButton)
self.radio1Layout.addWidget(self.rgbButton)
self.radio1Layout.addWidget(self.hsvButton)
self.radio1Layout.addWidget(self.yuvButton)

#self.radio1Layout.addLayout(self.radio2Layout)
#self.radio1Layout.addLayout(self.radio3Layout)
self.radioLayout.addLayout(self.radio1Layout)
self.vSpacer = QSpacerItem(10, 10, QSizePolicy.Ignored, QSizePolicy.Ignored);
self.radioLayout.addItem(self.vSpacer)

hmin,smin,vmin = HSVMIN
Expand Down
25 changes: 22 additions & 3 deletions src/tools/colorTuner_py/gui/gui.py
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@
from logoWidget import LogoWidget
import resources_rc
import sys
import cv2

class MainWindow(QMainWindow):

Expand Down Expand Up @@ -133,11 +134,11 @@ def __init__(self, parent=None):
zoompixGroupBox = QGroupBox("Zoom x" + str(self.ZOOM_X))
grid3 = QGridLayout()
self.crop = MyLabel(self, True)
self.crop.setFixedSize(200,200)
self.crop.setFixedSize(150,150)

self.tootippixel = QLabel(self)
self.pixel = QLabel(self)
self.pixel.setFixedSize(75,75)
self.pixel.setFixedSize(50,50)
self.rgbVal = QLabel("RGB")

grid3.addWidget(self.crop,0,0)
Expand All @@ -151,10 +152,23 @@ def __init__(self, parent=None):
grid4.addWidget(controlWidget)
slidersGroupBox.setLayout(grid4)

filtGroupBox = QGroupBox("Color Space")
image = cv2.imread("resources/HLSColorSpace.png")
self.colorSpace = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
self.colorSpaceLabel = QLabel(self)
#filtImg.setScaledContents(True)
d = QImage(self.colorSpace.data, self.colorSpace.shape[1], self.colorSpace.shape[0], self.colorSpace.shape[1] * self.colorSpace.shape[2], QImage.Format_RGB888).scaled(200, 200, Qt.KeepAspectRatio)
self.colorSpaceLabel.setFixedSize(200,200)
self.colorSpaceLabel.setPixmap(QPixmap.fromImage(d))
gridf = QGridLayout()
gridf.addWidget(self.colorSpaceLabel)
filtGroupBox.setLayout(gridf)

imagesLayout.addWidget(sourceGroupBox,0)
imagesLayout.addWidget(filterGroupBox,1)
controlLayout.addWidget(zoompixGroupBox,0)
controlLayout.addStretch(10)
#controlLayout.addStretch(10)
controlLayout.addWidget(filtGroupBox,0)
controlLayout.addWidget(slidersGroupBox,0)
mainLayout.addLayout(imagesLayout,0,0)
mainLayout.addLayout(controlLayout,0,1)
Expand All @@ -177,9 +191,14 @@ def updateGUI(self):

filt = self.getFilterName()
img = self.camera.getFilteredImage(filt)
if (filt is not "Orig"):
disc2 = self.camera.getFilter(filt).apply(self.colorSpace)
imgDisc = QImage(disc2.data, disc2.shape[1], disc2.shape[0], disc2.shape[1] * disc2.shape[2], QImage.Format_RGB888).scaled(200, 200)
self.colorSpaceLabel.setPixmap(QPixmap.fromImage(imgDisc))
if img is not None:
self.imageF = QImage(img.data, img.shape[1], img.shape[0], img.shape[1] * img.shape[2], QImage.Format_RGB888).scaled(self.IMAGE_COLS_MAX, self.IMAGE_ROWS_MAX)
self.filterImg.setPixmap(QPixmap.fromImage(self.imageF))


#print "update"
pos = self.sourceImg.getMousePos()
Expand Down
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.