import sys import os import cv2 import numpy as np from PyQt5 import QtCore, QtGui, QtWidgets from segment_anything import sam_model_registry, SamPredictor class Ui_MainWindow(object): def setupUi(self, MainWindow): MainWindow.setObjectName("MainWindow") MainWindow.resize(1333, 657) self.centralwidget = QtWidgets.QWidget(MainWindow) self.centralwidget.setObjectName("centralwidget") self.pushButton_init = QtWidgets.QPushButton(self.centralwidget) self.pushButton_init.setGeometry(QtCore.QRect(10, 30, 141, 41)) self.pushButton_init.setObjectName("pushButton_init") self.pushButton_openimg = QtWidgets.QPushButton(self.centralwidget) self.pushButton_openimg.setGeometry(QtCore.QRect(10, 90, 141, 41)) self.pushButton_openimg.setObjectName("pushButton_openimg") self.pushButton_Fusionimg = QtWidgets.QPushButton(self.centralwidget) self.pushButton_Fusionimg.setGeometry(QtCore.QRect(10, 270, 141, 41)) self.pushButton_Fusionimg.setObjectName("pushButton_Fusionimg") self.pushButton_exit = QtWidgets.QPushButton(self.centralwidget) self.pushButton_exit.setGeometry(QtCore.QRect(10, 570, 141, 41)) self.pushButton_exit.setObjectName("pushButton_exit") self.pushButton_Transparency = QtWidgets.QPushButton(self.centralwidget) self.pushButton_Transparency.setGeometry(QtCore.QRect(10, 380, 141, 41)) self.pushButton_Transparency.setObjectName("pushButton_Transparency") self.pushButton_copymask = QtWidgets.QPushButton(self.centralwidget) self.pushButton_copymask.setGeometry(QtCore.QRect(10, 450, 141, 41)) self.pushButton_copymask.setObjectName("pushButton_copymask") self.pushButton_saveimg = QtWidgets.QPushButton(self.centralwidget) self.pushButton_saveimg.setGeometry(QtCore.QRect(10, 510, 141, 41)) self.pushButton_saveimg.setObjectName("pushButton_saveimg") self.horizontalSlider = QtWidgets.QSlider(self.centralwidget) self.horizontalSlider.setGeometry(QtCore.QRect(10, 330, 141, 22)) self.horizontalSlider.setOrientation(QtCore.Qt.Horizontal) self.horizontalSlider.setObjectName("horizontalSlider") self.horizontalSlider.setValue(50) self.label_Originalimg = QtWidgets.QLabel(self.centralwidget) self.label_Originalimg.setGeometry(QtCore.QRect(160, 30, 571, 581)) self.label_Originalimg.setStyleSheet("background-color: rgb(255, 255, 255);") self.label_Originalimg.setObjectName("label_Originalimg") self.label_Maskimg = QtWidgets.QLabel(self.centralwidget) self.label_Maskimg.setGeometry(QtCore.QRect(740, 30, 581, 581)) self.label_Maskimg.setStyleSheet("background-color: rgb(255, 255, 255);") self.label_Maskimg.setObjectName("label_Maskimg") self.pushButton_shang = QtWidgets.QPushButton(self.centralwidget) self.pushButton_shang.setGeometry(QtCore.QRect(10, 150, 141, 41)) self.pushButton_shang.setObjectName("pushButton_shang") self.pushButton_xia = QtWidgets.QPushButton(self.centralwidget) self.pushButton_xia.setGeometry(QtCore.QRect(10, 210, 141, 41)) self.pushButton_xia.setObjectName("pushButton_openimg_3") MainWindow.setCentralWidget(self.centralwidget) self.menubar = QtWidgets.QMenuBar(MainWindow) self.menubar.setGeometry(QtCore.QRect(0, 0, 1333, 26)) self.menubar.setObjectName("menubar") MainWindow.setMenuBar(self.menubar) self.statusbar = QtWidgets.QStatusBar(MainWindow) self.statusbar.setObjectName("statusbar") MainWindow.setStatusBar(self.statusbar) self.retranslateUi(MainWindow) QtCore.QMetaObject.connectSlotsByName(MainWindow) def retranslateUi(self, MainWindow): _translate = QtCore.QCoreApplication.translate MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow")) self.pushButton_init.setText(_translate("MainWindow", "重置选择")) self.pushButton_openimg.setText(_translate("MainWindow", "打开图片")) self.pushButton_shang.setText(_translate("MainWindow", "上一张")) self.pushButton_xia.setText(_translate("MainWindow", "下一张")) self.pushButton_Fusionimg.setText(_translate("MainWindow", "融合背景图片")) self.pushButton_exit.setText(_translate("MainWindow", "退出")) self.pushButton_Transparency.setText(_translate("MainWindow", "调整透明度")) self.pushButton_copymask.setText(_translate("MainWindow", "复制掩码")) self.pushButton_saveimg.setText(_translate("MainWindow", "保存图片")) self.label_Originalimg.setText( _translate("MainWindow", "

原始图像

")) self.label_Maskimg.setText( _translate("MainWindow", "

掩码图像

")) class MyMainWindow(QtWidgets.QMainWindow, Ui_MainWindow): def __init__(self): super(MyMainWindow, self).__init__() self.setupUi(self) self.init_slots() self.image_files = [] self.current_index = 0 def init_slots(self): self.pushButton_openimg.clicked.connect(self.button_image_open) self.pushButton_shang.clicked.connect(self.button_image_shang) self.pushButton_xia.clicked.connect(self.button_image_xia) self.pushButton_exit.clicked.connect(self.button_image_exit) def button_image_open(self): choice = QtWidgets.QMessageBox.question(None, "选择", "您想要打开文件夹还是选择一个图片文件?", QtWidgets.QMessageBox.Open | QtWidgets.QMessageBox.Cancel) if choice == QtWidgets.QMessageBox.Open: folder_path = QtWidgets.QFileDialog.getExistingDirectory(None, "选择文件夹", "") if folder_path: self.image_files = [os.path.join(folder_path, file) for file in os.listdir(folder_path) if file.lower().endswith(('.png', '.jpg', '.jpeg', '.bmp'))] if self.image_files: self.current_index = 0 self.display_image() elif choice == QtWidgets.QMessageBox.Cancel: selected_image, _ = QtWidgets.QFileDialog.getOpenFileName(None, "选择图片", "", "Image files (*.png *.jpg *.jpeg *.bmp)") if selected_image: self.image_files = [selected_image] self.current_index = 0 self.display_image() def display_image(self): if self.image_files: pixmap = QtGui.QPixmap(self.image_files[self.current_index]) self.label_Originalimg.setPixmap(pixmap) self.label_Originalimg.setScaledContents(True) def button_image_shang(self): if self.image_files: self.current_index = (self.current_index - 1) % len(self.image_files) self.display_image() def button_image_xia(self): if self.image_files: self.current_index = (self.current_index + 1) % len(self.image_files) self.display_image() def button_image_exit(self): sys.exit() if __name__ == "__main__": app = QtWidgets.QApplication(sys.argv) my_main_window = MyMainWindow() my_main_window.show() sys.exit(app.exec_())