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", "掩码图像
")) def init_slots(self): self.pushButton_openimg.clicked.connect(self.button_image_open) self.pushButton_init.clicked.connect(self.button_image_init) self.pushButton_shang.clicked.connect(self.button_image_shang) self.pushButton_xia.clicked.connect(self.button_image_xia) self.pushButton_Fusionimg.clicked.connect(self.button_image_Fusionimg) self.pushButton_copymask.clicked.connect(self.button_image_copymask) self.pushButton_saveimg.clicked.connect(self.button_image_saveimg) self.pushButton_exit.clicked.connect(self.button_image_exit) self.horizontalSlider.valueChanged.connect(self.slider_value_changed) self.pushButton_openimg.clicked.connect(self.button_image_open) # 连接label_Originalimg点击事件 self.label_Originalimg.mousePressEvent = self.label_Originalimg_click_event def label_Originalimg_click_event(self, event): # 捕获label_Originalimg中的鼠标点击事件 point = event.pos() x, y = point.x(), point.y() print("Clicked at:", x, y) # 您可以使用这些坐标进行预测 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: image_files = [os.path.join(folder_path, file) for file in os.listdir(folder_path) if file.lower().endswith(('.png', '.jpg', '.jpeg', '.bmp'))] if image_files: self.image_files = 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 hasattr(self, 'image_files') and 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 hasattr(self, 'image_files') and self.image_files: self.current_index = (self.current_index - 1) % len(self.image_files) self.display_image() def button_image_xia(self): if hasattr(self, 'image_files') and self.image_files: self.current_index = (self.current_index + 1) % len(self.image_files) self.display_image() def button_image_exit(self): sys.exit() def slider_value_changed(self, value): print("Slider value changed:", value) def button_image_saveimg(self): pass def button_image_Fusionimg(self): pass def button_image_copymask(self): pass def button_image_init(self): pass if __name__ == "__main__": app = QtWidgets.QApplication(sys.argv) MainWindow = QtWidgets.QMainWindow() ui = Ui_MainWindow() ui.setupUi(MainWindow) ui.init_slots() # 调用init_slots以连接信号和槽 MainWindow.show() sys.exit(app.exec_())