так вот графический интерфейс c, который я хочу создать, поэтому, когда я нажимаю на кнопку "parcourir", я выбираю изображение, и это работает, поэтому главная проблема заключается в том, когда я нажимаю на "recherche image similaire" для печати 9 наиболее похожих изображений по сравнению с исходным изображением с использованием факторного расстояния, поэтому используйте метод calcHist для расчета цвета гистограммы, затем гистограмма нормализуется с помощью метода cv.normalize: compHist для сравнения гистограмм между 2 изображениями, поэтому я использую команду cv.compareHist, которая вернуть расстояние между двумя изображениями, тогда последний метод - showResults (): отсортировать изображения по расстоянию, затем распечатать 9 изображений с их расстоянием в сетке, так как я могу это сделать? это мой код
from PyQt5 import QtWidgets
import sys
import cv2 as cv
import numpy as np
import design
import os
from matplotlib.figure import Figure
from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as figureCanvas
class designWindow(QtWidgets.QMainWindow, design.Ui_MainWindow):
def __init__(self):
super(designWindow, self).__init__()
self.setupUi(self)
self.figImg = makeFigure(self.horizontalLayout)
self.GridLay = makeFigure(self.gridLayout)
self.pushButton.clicked.connect(self.getImage)
self.pushButton_2.clicked.connect(self.showResults)
def getImage(self):
file = QtWidgets.QFileDialog.getOpenFileName(self, "choose image", "", "image files (*.jpg)")
if file[0]:
self.img_req = cv.imread(file[0])
self.img_req = cv.cvtColor(self.img_req, cv.COLOR_BGR2RGB)
self.figImg.clf()
ax = self.figImg.add_subplot(111)
ax.imshow(self.img_req)
ax.axis("off")
self.figImg.canvas.draw()
def calcDistance():
L = []
for i in files:
H1 = calcHist(self.img_req, 0)
H2 = calcHist(i, 0)
d = compHist(H1, H2)
L.append(d)
return L
def showResults(self):
L.sort()
for i in range(1,10):
ax = self.GridLay.add_subplot(3,3,i)
ax.imshow(self.files[i])
ax.axis("off")
self.GridLay.canvas.draw()
path = "C:\\Users\\HELMI MEHDI\\Desktop\\TP2\\TP2_base_images\\bases_images\\"
pathname = os.path.dirname(path)
files = os.listdir(pathname)
def compHist(hist_img_req,hist_img_cour):
return cv.compareHist(hist_img_req,hist_img_cour,cv.HISTCMP_INTERSECT)
def calcHist(img, ch = 0):
histimg = cv.calcHist([img],[ch],None,[256],[0,256])
return cv.normalize(histimg,histimg_norm)
def makeFigure(layout):
fig = Figure()
canvas = figureCanvas(fig)
layout.addWidget(canvas)
canvas.draw()
return fig
def main():
app = QtWidgets.QApplication(sys.argv)
form = designWindow()
form.show()
app.exec_()
if __name__ == "__main__":
main()