Exemple #1
0
 def get_minute_text_color(self, minute):
     c = self.get_minute_color(minute)
     return QColor.fromHsv((c.hue() + 180) % 360, 0, 0)
Exemple #2
0
 def get_minute_color(self, minute):
     OFFSET = 37
     i = self.minutes_index_map[minute]
     return QColor.fromHsv((OFFSET * i) % 360, 150, 250)
Exemple #3
0
    def redraw(self):
        x = np.arange(256)
        alpha = 0.25
        rgb = self.rgb_radio.isChecked()
        red = self.red_radio.isChecked()
        green = self.green_radio.isChecked()
        blue = self.blue_radio.isChecked()
        value = self.value_radio.isChecked()
        grid = self.grid_check.isChecked()
        log = self.log_check.isChecked()
        try:
            self.axes.clear()
        except RecursionError:
            return
        y = None
        if value:
            y = self.hist[3]
            self.axes.step(x, y, 'k')
            self.axes.fill_between(x,
                                   y,
                                   alpha=alpha,
                                   facecolor='k',
                                   step='pre')
        else:
            # TODO: Ottimizzare facendo un ciclo senza ripetere le istruzioni
            if red or rgb:
                y = self.hist[0]
                self.axes.step(x, y, 'r')
                self.axes.fill_between(x,
                                       y,
                                       alpha=alpha,
                                       facecolor='r',
                                       step='pre')
            if green or rgb:
                y = self.hist[1]
                self.axes.step(x, y, 'g')
                self.axes.fill_between(x,
                                       y,
                                       alpha=alpha,
                                       facecolor='g',
                                       step='pre')
            if blue or rgb:
                y = self.hist[2]
                self.axes.step(x, y, 'b')
                self.axes.fill_between(x,
                                       y,
                                       alpha=alpha,
                                       facecolor='b',
                                       step='pre')
        if log:
            self.axes.set_yscale('log')
            self.axes.set_ylim(bottom=1)
        else:
            self.axes.set_yscale('linear')
            self.axes.set_ylim(bottom=0)
        self.axes.set_xlim([-1, 256])
        self.axes.set_xlabel(self.tr('intensity value'))
        self.axes.set_ylabel(self.tr('pixel count'))
        self.axes.set_xticks([0, 64, 128, 192, 255])
        self.axes.grid(grid, which='both')

        if rgb:
            self.table_widget.setEnabled(False)
            self.marker_check.setEnabled(False)
            self.start_slider.setEnabled(False)
            self.end_slider.setEnabled(False)
            for i in range(self.table_widget.rowCount()):
                if self.table_widget.item(i, 1) is not None:
                    self.table_widget.item(i, 1).setText('')
                    self.table_widget.item(i, 1).setBackgroundColor(
                        QColor('white'))
        else:
            self.table_widget.setEnabled(True)
            self.marker_check.setEnabled(True)
            self.start_slider.setEnabled(True)
            self.end_slider.setEnabled(True)
            start = self.start_slider.value()
            end = self.end_slider.value()
            if end <= start:
                end = start + 1
            elif start >= end:
                start = end - 1
            total = np.sum(y)
            x = x[start:end + 1]
            y = y[start:end + 1]
            count = np.sum(y)
            if count != 0:
                argmin = np.argmin(y) + start
                argmax = np.argmax(y) + start
                mean = np.round(np.sum(x * y) / count, 2)
                stddev = np.round(np.sqrt(np.sum(((x - mean)**2) * y) / count),
                                  2)
                median = np.argmax(np.cumsum(y) > count / 2) + start
                percent = np.round(count / total * 100, 2)
                y = y / np.max(y)
                sweep = len(y)
                smooth = 0
                if sweep > 2:
                    for i in range(1, sweep - 1):
                        h0 = y[i - 1]
                        h1 = y[i]
                        h2 = y[i + 1]
                        smooth += abs((h0 + h2) / 2 - h1)
                    smooth = np.round((1 - (smooth / (sweep - 2))) * 100, 2)
                if self.marker_check.isChecked():
                    self.axes.axvline(argmin, linestyle='--', color='m')
                    self.axes.axvline(mean, linestyle='-', color='m')
                    self.axes.axvline(argmax, linestyle='-.', color='m')
            else:
                argmin = argmax = mean = stddev = median = percent = smooth = 0
            self.table_widget.setItem(0, 1, QTableWidgetItem(str(argmin)))
            self.table_widget.setItem(1, 1, QTableWidgetItem(str(argmax)))
            self.table_widget.setItem(2, 1, QTableWidgetItem(str(mean)))
            self.table_widget.setItem(3, 1, QTableWidgetItem(str(median)))
            self.table_widget.setItem(4, 1, QTableWidgetItem(str(stddev)))
            self.table_widget.setItem(5, 1, QTableWidgetItem(str(count)))
            self.table_widget.setItem(6, 1,
                                      QTableWidgetItem(str(percent) + '%'))
            self.table_widget.setItem(7, 1,
                                      QTableWidgetItem(str(smooth) + '%'))
            if smooth <= 80:
                self.table_widget.item(7, 1).setBackgroundColor(
                    QColor.fromHsv(0, 96, 255))
            elif smooth <= 90:
                self.table_widget.item(7, 1).setBackgroundColor(
                    QColor.fromHsv(30, 96, 255))
            elif smooth <= 95:
                self.table_widget.item(7, 1).setBackgroundColor(
                    QColor.fromHsv(60, 96, 255))
            else:
                self.table_widget.item(7, 1).setBackgroundColor(
                    QColor.fromHsv(90, 96, 255))
            self.table_widget.resizeColumnsToContents()
            if start != 0 or end != 255:
                self.axes.axvline(start, linestyle=':', color='k')
                self.axes.axvline(end, linestyle=':', color='k')
                _, top = self.axes.get_ylim()
                self.axes.fill_between(np.arange(start, end + 1),
                                       top,
                                       facecolor='y',
                                       alpha=alpha * 2)
        self.axes.figure.canvas.draw()
def color_from_index(index):
    eh, es, ev = get_hsv_indexes(index)
    h = int(360.0 * eh / 90)
    s = int(255.0 * es / 24)
    v = int(255.0 * ev / 24)
    return QColor.fromHsv(h, s, v)
Exemple #5
0
 def get_color(self):
     """Get random color"""
     return QColor.fromHsv(random.randrange(0, 360), 100, 255)