SAM/display.py

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_())