170 lines
8.5 KiB
Python
170 lines
8.5 KiB
Python
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", "<html><head/><body><p align=\"center\">原始图像</p></body></html>"))
|
|
self.label_Maskimg.setText(
|
|
_translate("MainWindow", "<html><head/><body><p align=\"center\">掩码图像</p></body></html>"))
|
|
|
|
|
|
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_())
|
|
|