def get_minute_text_color(self, minute): c = self.get_minute_color(minute) return QColor.fromHsv((c.hue() + 180) % 360, 0, 0)
def get_minute_color(self, minute): OFFSET = 37 i = self.minutes_index_map[minute] return QColor.fromHsv((OFFSET * i) % 360, 150, 250)
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)
def get_color(self): """Get random color""" return QColor.fromHsv(random.randrange(0, 360), 100, 255)