def menuActionMatch(self): # get parameters popup = DialogMatch(self.window) popup.exec_() if not popup.path: return # read file at popup.path target = cv2.imread(popup.path, 0) if target is None: print("Could not open file or file is not an image.") return # copy current state old = self.history[self.historyIndex] matrix = old['matrix'].copy() histogram = deepcopy(old['histogram']['plots'][0]) # apply histogram matching histogram1 = Histogram.hist(target) matrix = Transform.match(matrix, histogram, histogram1) # compute histogram histogram = { 'plots': [Histogram.hist(matrix), histogram1], 'legend': ["New", "Target"] } # add new state self.appendHistory({ 'matrix': matrix, 'histogram': histogram, 'saved': False }) self.updateImage(matrix) hist = [old['histogram']['plots'][0]] + histogram['plots'] legend = ["Old"] + histogram['legend'] self.windowHist.setHistogram(hist, legend)
def menuActionShape(self): # get parameters popup = DialogShape(self.window) popup.exec_() if popup.function is None \ or popup.center is None or popup.width is None \ or popup.times is None or popup.distance is None \ or popup.direction is None: return # copy current state old = self.history[self.historyIndex] matrix = old['matrix'].copy() histogram = deepcopy(old['histogram']['plots'][0]) # apply histogram shaping matrix, target = Transform.shape(matrix, histogram, popup.function, \ popup.center, popup.width, popup.times, popup.distance, popup.direction) # compute histogram h = Histogram.hist(matrix) target = Math.scale(target, max(h) / float(max(target))) histogram = { 'plots': [h, target], 'legend': ["New", "Target"] } # add new state self.appendHistory({ 'matrix': matrix, 'histogram': histogram, 'saved': False }) self.updateImage(matrix) hist = [old['histogram']['plots'][0]] + histogram['plots'] legend = ["Old"] + histogram['legend'] self.windowHist.setHistogram(hist, legend)
def menuActionPower(self): # get parameters popup = DialogPower(self.window) popup.exec_() if popup.c is None or popup.p is None: return # copy current state old = self.history[self.historyIndex] matrix = old['matrix'].copy() histogram = deepcopy(old['histogram']['plots'][0]) # apply power function matrix = Transform.power(matrix, popup.c, popup.p) # compute histogram histogram = { 'plots': [Histogram.hist(matrix)], 'legend': [str(popup.c) + "*i^" + str(popup.p)] } # add new state self.appendHistory({ 'matrix': matrix, 'histogram': histogram, 'saved': False }) self.updateImage(matrix) hist = [old['histogram']['plots'][0]] + histogram['plots'] legend = ["Old"] + histogram['legend'] self.windowHist.setHistogram(hist, legend)
def menuActionEqualize(self): # copy current state old = self.history[self.historyIndex] matrix = old['matrix'].copy() histogram = deepcopy(old['histogram']['plots'][0]) # apply histogram equalization matrix = Transform.equalize(matrix, histogram) # compute histogram histogram = { 'plots': [Histogram.hist(matrix)], 'legend': ["Equalized"] } # add new state self.appendHistory({ 'matrix': matrix, 'histogram': histogram, 'saved': False }) self.updateImage(matrix) hist = [old['histogram']['plots'][0]] + histogram['plots'] legend = ["Old"] + histogram['legend'] self.windowHist.setHistogram(hist, legend)
def openImage(self, path): if not path: return # close current image e = QtCore.QEvent(None) self.closeEvent(e) if not e.isAccepted(): return # read image matrix = cv2.imread(path, 0) if matrix is None: print("Could not open file or file is not an image.") return self.history = [{'matrix': matrix, 'histogram': None, 'saved': True}] self.historyIndex = 0 layout = self.centralwidget.layout() # clean layout for i in reversed(range(layout.count())): item = layout.itemAt(i) widget = item.widget() if widget is None: layout.removeItem(item) else: widget.deleteLater() del item # show image self.scrollArea = QtGui.QScrollArea() self.imageLabel = ImageLabel(scrollArea=self.scrollArea) self.imageLabel.setBackgroundRole(QtGui.QPalette.Base) self.imageLabel.setSizePolicy(QtGui.QSizePolicy.Ignored, QtGui.QSizePolicy.Ignored) self.imageLabel.setScaledContents(True) self.scrollArea.setAlignment(QtCore.Qt.AlignCenter) self.scrollArea.setWidget(self.imageLabel) layout.addWidget(self.scrollArea) layout.setContentsMargins(0, 0, 0, 0) self.updateImage(matrix) self.zoom = 1 # adjust window's size height, width = matrix.shape adjustWindowSize(self.window, width + 2, height + 2) # center window geom = desktopGeometry() x = geom.x() + 0.5 * (geom.width() - self.window.frameSize().width()) y = geom.y() + 0.5 * (geom.height() - self.window.frameSize().height()) self.window.move(x, y) # create histogram window if self.windowHist is None or self.windowHist.isClosed(): if self.windowHist is not None: del self.windowHist self.windowHist = WindowHistogram(self.window) self.windowHist.show() hist = [Histogram.hist(matrix)] legend = ["Source Image"] self.history[0]['histogram'] = {'plots': hist, 'legend': legend} self.windowHist.setHistogram(hist, legend) self.windowHist.adjustWindowSize() self.windowHist.adjustWindowPosition() self.window.activateWindow() self.window.setFocus() # enable _Save, Edit, View+, Transform+ and _Histogram self.actionSave.setEnabled(True) self.menuEdit.setEnabled(True) for a in self.menuView.actions(): a.setEnabled(True) self.menuView.setEnabled(True) for a in self.menuTransform.actions(): a.setEnabled(True) self.menuTransform.setEnabled(True) self.window.actionHistogram.setEnabled(True)