class ColorFilterWidget(QtGui.QWidget, Ui_Form):
    IMAGE_COLS_MAX=320
    IMAGE_ROWS_MAX=240

    imageUpdate=QtCore.pyqtSignal()
    
    def __init__(self,winParent):      
        super(ColorFilterWidget, self).__init__()
	self.setupUi(self)
        self.winParent=winParent
        self.imageUpdate.connect(self.updateImage)

        self.filterValues = ColorFilterValues()

        self.resetButton.clicked[bool].connect(self.resetValues)
        self.trackButton.clicked[bool].connect(self.track)
        self.trackObject = False

        self.hminSlider.valueChanged[int].connect(self.hminValueChange)
        self.hmaxSlider.valueChanged[int].connect(self.hmaxValueChange)
        self.sminSlider.valueChanged[int].connect(self.sminValueChange)
        self.smaxSlider.valueChanged[int].connect(self.smaxValueChange)
        self.vminSlider.valueChanged[int].connect(self.vminValueChange)
        self.vmaxSlider.valueChanged[int].connect(self.vmaxValueChange)

    def updateImage(self):
        img = self.setInputImage()
        #self.setThresoldImage()
        #self.winParent.getSensor().setColorFilterValues(self.filterValues)
        if img is not None:
            img_out = self.processImage(img)
            self.setOutputImage(img_out)

    def setInputImage(self):

        if self.trackObject:
            img = self.winParent.getSensor().getTrackImage()
        else:
            img = self.winParent.getSensor().getImage()

        if img is not None:
            image = QtGui.QImage(img.data, img.shape[1], img.shape[0], img.shape[1]*img.shape[2], QtGui.QImage.Format_RGB888);
            self.inputImage.setPixmap(QtGui.QPixmap.fromImage(image))

        return img


    def setThresoldImage(self):
        img = self.winParent.getSensor().getThresoldImage()
        if img is not None:
            image = QtGui.QImage(img.data, img.shape[1], img.shape[0], img.shape[1], QtGui.QImage.Format_Indexed8)
            self.outputFilterImage.setPixmap(QtGui.QPixmap.fromImage(image))


    def setOutputImage(self, img):
        image = QtGui.QImage(img.data, img.shape[1], img.shape[0], img.shape[1]*img.shape[2], QtGui.QImage.Format_RGB888);
        self.outputFilterImage.setPixmap(QtGui.QPixmap.fromImage(image))


    def processImage(self, img_in):
        hsv = cv2.cvtColor(img_in, cv2.COLOR_RGB2HSV)

        vmin = (self.filterValues.hmin, self.filterValues.smin, self.filterValues.vmin)
        vmax = (self.filterValues.hmax, self.filterValues.smax, self.filterValues.vmax)
        mask = cv2.inRange(hsv, vmin, vmax)

        img_out = cv2.bitwise_and(img_in, img_in, mask=mask)

        return img_out


    def track(self):
        if(self.trackObject==False):
            self.trackButton.setText("Untrack")
            self.trackObject=True
        else:
            self.trackButton.setText("Track")
            self.trackObject=False

    def getFilterValues(self):
        return self.filterValues

    def setFilterValues(self,values):
        self.filterValues=values

    def resetValues(self):
        self.filterValues.setHMin(0)
        self.hminSlider.setValue(self.filterValues.getHMin())
        self.filterValues.setHMax(180)
        self.hmaxSlider.setValue(self.filterValues.getHMax())
        self.filterValues.setSMin(0)
        self.sminSlider.setValue(self.filterValues.getSMin())
        self.filterValues.setSMax(255)
        self.smaxSlider.setValue(self.filterValues.getSMax())
        self.filterValues.setVMin(0)
        self.vminSlider.setValue(self.filterValues.getVMin())
        self.filterValues.setVMax(255)
        self.vmaxSlider.setValue(self.filterValues.getVMax())

    def closeEvent(self, event):
        self.winParent.closeColorFilterWidget()

    def hminValueChange(self, value):
        self.filterValues.setHMin(value)
        self.hminValue.setNum(self.filterValues.getHMin())

    def hmaxValueChange(self, value):
        self.filterValues.setHMax(value)
        self.hmaxValue.setNum(self.filterValues.getHMax())

    def sminValueChange(self, value):
        self.filterValues.setSMin(value)
        self.sminValue.setNum(self.filterValues.getSMin())

    def smaxValueChange(self, value):
        self.filterValues.setSMax(value)
        self.smaxValue.setNum(self.filterValues.getSMax())

    def vminValueChange(self, value):
        self.filterValues.setVMin(value)
        self.vminValue.setNum(self.filterValues.getVMin())

    def vmaxValueChange(self, value):
        self.filterValues.setVMax(value)
        self.vmaxValue.setNum(self.filterValues.getVMax())
예제 #2
0
class ColorFilterWidget(QtGui.QWidget, Ui_Form):
    IMAGE_COLS_MAX=320
    IMAGE_ROWS_MAX=240

    imageUpdate=QtCore.pyqtSignal()
    
    def __init__(self,winParent):      
        super(ColorFilterWidget, self).__init__()
	self.setupUi(self)
        self.winParent=winParent
        self.imageUpdate.connect(self.updateImage)

        self.filterValues = ColorFilterValues()

        self.resetButton.clicked[bool].connect(self.resetValues)
        self.trackButton.clicked[bool].connect(self.track)
        self.trackObject = False

        self.hminSlider.valueChanged[int].connect(self.hminValueChange)
        self.hmaxSlider.valueChanged[int].connect(self.hmaxValueChange)
        self.sminSlider.valueChanged[int].connect(self.sminValueChange)
        self.smaxSlider.valueChanged[int].connect(self.smaxValueChange)
        self.vminSlider.valueChanged[int].connect(self.vminValueChange)
        self.vmaxSlider.valueChanged[int].connect(self.vmaxValueChange)

    def updateImage(self):
        self.setInputImage()
        self.setThresoldImage()
        self.winParent.getSensor().setColorFilterValues(self.filterValues)

    def setInputImage(self):

        if self.trackObject:
            img = self.winParent.getSensor().getTrackImage()
        else:
            img = self.winParent.getSensor().getImage()

        if img != None:
            image = QtGui.QImage(img.data, img.shape[1], img.shape[0], img.shape[1]*img.shape[2], QtGui.QImage.Format_RGB888);
            self.inputImage.setPixmap(QtGui.QPixmap.fromImage(image))


    def setThresoldImage(self):
        img = self.winParent.getSensor().getThresoldImage()
        if img != None:
            image = QtGui.QImage(img.data, img.shape[1], img.shape[0], img.shape[1], QtGui.QImage.Format_Indexed8)
            self.outputFilterImage.setPixmap(QtGui.QPixmap.fromImage(image))

    def track(self):
        if(self.trackObject==False):
            self.trackButton.setText("Untrack")
            self.trackObject=True
        else:
            self.trackButton.setText("Track")
            self.trackObject=False

    def getFilterValues(self):
        return self.filterValues

    def setFilterValues(self,values):
        self.filterValues=values

    def resetValues(self):
        self.filterValues.setHMin(0)
        self.hminSlider.setValue(self.filterValues.getHMin())
        self.filterValues.setHMax(0)
        self.hmaxSlider.setValue(self.filterValues.getHMax())
        self.filterValues.setSMin(0)
        self.sminSlider.setValue(self.filterValues.getSMin())
        self.filterValues.setSMax(0)
        self.smaxSlider.setValue(self.filterValues.getSMax())
        self.filterValues.setVMin(0)
        self.vminSlider.setValue(self.filterValues.getVMin())
        self.filterValues.setVMax(0)
        self.vmaxSlider.setValue(self.filterValues.getVMax())

    def closeEvent(self, event):
        self.winParent.closeColorFilterWidget()

    def hminValueChange(self, value):
        self.filterValues.setHMin(value)
        self.hminValue.setNum(self.filterValues.getHMin())

    def hmaxValueChange(self, value):
        self.filterValues.setHMax(value)
        self.hmaxValue.setNum(self.filterValues.getHMax())

    def sminValueChange(self, value):
        self.filterValues.setSMin(value)
        self.sminValue.setNum(self.filterValues.getSMin())

    def smaxValueChange(self, value):
        self.filterValues.setSMax(value)
        self.smaxValue.setNum(self.filterValues.getSMax())

    def vminValueChange(self, value):
        self.filterValues.setVMin(value)
        self.vminValue.setNum(self.filterValues.getVMin())

    def vmaxValueChange(self, value):
        self.filterValues.setVMax(value)
        self.vmaxValue.setNum(self.filterValues.getVMax())
class ColorFilterWidget(QtGui.QWidget, Ui_Form):
    IMAGE_COLS_MAX = 320
    IMAGE_ROWS_MAX = 240

    imageUpdate = QtCore.pyqtSignal()

    def __init__(self, winParent):
        super(ColorFilterWidget, self).__init__()
        self.setupUi(self)
        self.winParent = winParent
        self.imageUpdate.connect(self.updateImage)

        self.filterValues = ColorFilterValues()

        self.resetButton.clicked[bool].connect(self.resetValues)

        self.hminSlider.valueChanged[int].connect(self.hminValueChange)
        self.hmaxSlider.valueChanged[int].connect(self.hmaxValueChange)
        self.sminSlider.valueChanged[int].connect(self.sminValueChange)
        self.smaxSlider.valueChanged[int].connect(self.smaxValueChange)
        self.vminSlider.valueChanged[int].connect(self.vminValueChange)
        self.vmaxSlider.valueChanged[int].connect(self.vmaxValueChange)

    def updateImage(self):
        self.setInputImage()
        self.setThresoldImage()

    def setInputImage(self):
        img = self.winParent.grid.map

        if img != None:
            image = QtGui.QImage(img.data, img.shape[1], img.shape[0],
                                 img.shape[1], QtGui.QImage.Format_Indexed8)
            self.inputImage.setPixmap(QtGui.QPixmap.fromImage(image))
        else:
            print "image is none"

    def setThresoldImage(self):
        if not self.winParent.colorFilter.isChecked():
            return

        img = self.winParent.grid.map
        img = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
        minVals = np.array([
            self.filterValues.getHMin(),
            self.filterValues.getVMin(),
            self.filterValues.getSMin()
        ])
        maxVals = np.array([
            self.filterValues.getHMax(),
            self.filterValues.getVMax(),
            self.filterValues.getSMax()
        ])
        img = cv2.inRange(img, minVals, maxVals)

        if img != None:
            image = QtGui.QImage(img.data, img.shape[1], img.shape[0],
                                 img.shape[1], QtGui.QImage.Format_Indexed8)
            self.outputFilterImage.setPixmap(QtGui.QPixmap.fromImage(image))

    def getFilterValues(self):
        return self.filterValues

    def setFilterValues(self, values):
        self.filterValues = values

    def resetValues(self):
        self.filterValues.setHMin(0)
        self.hminSlider.setValue(self.filterValues.getHMin())
        self.filterValues.setHMax(0)
        self.hmaxSlider.setValue(self.filterValues.getHMax())
        self.filterValues.setSMin(0)
        self.sminSlider.setValue(self.filterValues.getSMin())
        self.filterValues.setSMax(0)
        self.smaxSlider.setValue(self.filterValues.getSMax())
        self.filterValues.setVMin(0)
        self.vminSlider.setValue(self.filterValues.getVMin())
        self.filterValues.setVMax(0)
        self.vmaxSlider.setValue(self.filterValues.getVMax())

    def closeEvent(self, event):
        self.winParent.closeColorFilterWidget()

    def hminValueChange(self, value):
        self.filterValues.setHMin(value)
        self.hminValue.setNum(self.filterValues.getHMin())

    def hmaxValueChange(self, value):
        self.filterValues.setHMax(value)
        self.hmaxValue.setNum(self.filterValues.getHMax())

    def sminValueChange(self, value):
        self.filterValues.setSMin(value)
        self.sminValue.setNum(self.filterValues.getSMin())

    def smaxValueChange(self, value):
        self.filterValues.setSMax(value)
        self.smaxValue.setNum(self.filterValues.getSMax())

    def vminValueChange(self, value):
        self.filterValues.setVMin(value)
        self.vminValue.setNum(self.filterValues.getVMin())

    def vmaxValueChange(self, value):
        self.filterValues.setVMax(value)
        self.vmaxValue.setNum(self.filterValues.getVMax())
class ColorFilterWidget(QtGui.QWidget, Ui_Form):
    IMAGE_COLS_MAX=320
    IMAGE_ROWS_MAX=240

    imageUpdate=QtCore.pyqtSignal()

    def __init__(self,winParent):
        super(ColorFilterWidget, self).__init__()
        self.setupUi(self)
        self.winParent=winParent
        self.imageUpdate.connect(self.updateImage)

        self.filterValues = ColorFilterValues()

        self.resetButton.clicked[bool].connect(self.resetValues)

        self.hminSlider.valueChanged[int].connect(self.hminValueChange)
        self.hmaxSlider.valueChanged[int].connect(self.hmaxValueChange)
        self.sminSlider.valueChanged[int].connect(self.sminValueChange)
        self.smaxSlider.valueChanged[int].connect(self.smaxValueChange)
        self.vminSlider.valueChanged[int].connect(self.vminValueChange)
        self.vmaxSlider.valueChanged[int].connect(self.vmaxValueChange)

    def updateImage(self):
        self.setInputImage()
        self.setThresoldImage()

    def setInputImage(self):
        img = self.winParent.grid.map

        if img != None:
            image = QtGui.QImage(img.data, img.shape[1], img.shape[0], img.shape[1], QtGui.QImage.Format_Indexed8)
            self.inputImage.setPixmap(QtGui.QPixmap.fromImage(image))
        else:
            print "image is none"


    def setThresoldImage(self):
        if not self.winParent.colorFilter.isChecked():
            return

        img = self.winParent.grid.map
        img = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
        minVals = np.array([self.filterValues.getHMin(), self.filterValues.getVMin(), self.filterValues.getSMin()])
        maxVals = np.array([self.filterValues.getHMax(), self.filterValues.getVMax(), self.filterValues.getSMax()])
        img = cv2.inRange(img, minVals, maxVals)

        if img != None:
            image = QtGui.QImage(img.data, img.shape[1], img.shape[0], img.shape[1], QtGui.QImage.Format_Indexed8)
            self.outputFilterImage.setPixmap(QtGui.QPixmap.fromImage(image))


    def getFilterValues(self):
        return self.filterValues

    def setFilterValues(self,values):
        self.filterValues=values

    def resetValues(self):
        self.filterValues.setHMin(0)
        self.hminSlider.setValue(self.filterValues.getHMin())
        self.filterValues.setHMax(0)
        self.hmaxSlider.setValue(self.filterValues.getHMax())
        self.filterValues.setSMin(0)
        self.sminSlider.setValue(self.filterValues.getSMin())
        self.filterValues.setSMax(0)
        self.smaxSlider.setValue(self.filterValues.getSMax())
        self.filterValues.setVMin(0)
        self.vminSlider.setValue(self.filterValues.getVMin())
        self.filterValues.setVMax(0)
        self.vmaxSlider.setValue(self.filterValues.getVMax())

    def closeEvent(self, event):
        self.winParent.closeColorFilterWidget()

    def hminValueChange(self, value):
        self.filterValues.setHMin(value)
        self.hminValue.setNum(self.filterValues.getHMin())

    def hmaxValueChange(self, value):
        self.filterValues.setHMax(value)
        self.hmaxValue.setNum(self.filterValues.getHMax())

    def sminValueChange(self, value):
        self.filterValues.setSMin(value)
        self.sminValue.setNum(self.filterValues.getSMin())

    def smaxValueChange(self, value):
        self.filterValues.setSMax(value)
        self.smaxValue.setNum(self.filterValues.getSMax())

    def vminValueChange(self, value):
        self.filterValues.setVMin(value)
        self.vminValue.setNum(self.filterValues.getVMin())

    def vmaxValueChange(self, value):
        self.filterValues.setVMax(value)
        self.vmaxValue.setNum(self.filterValues.getVMax())