When I pressed the button Load Data, the new folder was created, but only after I closed the application.
It's a method where I open a window, where I can choose o image. Next I convert a image to greyscale and try to save greyscale image to new folder.
Code:
def getFile(self):
#Open window to choose file
self.filePath, _ = QFileDialog.getOpenFileNames(self.window, 'Choose an image', "${HOME}","Formats: (*.png )")
for filePath in self.filePath:
image = Image.open(filePath)
#convert image to greyscale
img_grey = image.convert('L')
filename = os.path.basename(filePath)
#make new folder
os.makedirs(self.output_dir, exist_ok=True)
#join a filname from original image to image after greyscale
output_path = os.path.join(self.output_dir, filename)
#save a greyscale image to new folder
img_grey.save(output_path)
output_dir I defined in def init(method create by me):
class Ui_MainWindow(object):
def __init__(self):
self.filePath = ''
self.currentDir = os.getcwd()
self.images = []
self.output_dir = os.path.abspath('..\\greyscale_images')
Full code:
# -*- coding: utf-8 -*-
# Form implementation generated from reading ui file 'app.ui'
#
# Created by: PyQt5 UI code generator 5.15.9
#
# WARNING: Any manual changes made to this file will be lost when pyuic5 is
# run again. Do not edit this file unless you know what you are doing.
from PyQt5 import QtCore, QtGui, QtWidgets
import os
import sys
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
from pathlib import Path
from Code.show_data import showData
from Code.pyRadiomics import extractRadiomics
from Code.data import CustomDataset
from PIL import ImageOps, Image
import numpy as np
class Ui_MainWindow(object):
def __init__(self):
self.filePath = ''
self.currentDir = os.getcwd()
self.images = []
self.output_dir = os.path.abspath('..\\greyscale_images')
def setupUi(self, MainWindow):
self.window = MainWindow
MainWindow.setObjectName("MainWindow")
MainWindow.resize(951, 633)
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.frame = QtWidgets.QFrame(self.centralwidget)
self.frame.setEnabled(True)
self.frame.setGeometry(QtCore.QRect(10, 20, 541, 391))
self.frame.setFrameShape(QtWidgets.QFrame.StyledPanel)
self.frame.setFrameShadow(QtWidgets.QFrame.Raised)
self.frame.setObjectName("frame")
self.noNormaButton = QtWidgets.QRadioButton(self.frame)
self.noNormaButton.setGeometry(QtCore.QRect(20, 250, 141, 20))
self.noNormaButton.setObjectName("noNormaButton")
self.minMaxButton = QtWidgets.QRadioButton(self.frame)
self.minMaxButton.setGeometry(QtCore.QRect(20, 280, 171, 20))
self.minMaxButton.setObjectName("minMaxButton")
self.meanStdButton = QtWidgets.QRadioButton(self.frame)
self.meanStdButton.setGeometry(QtCore.QRect(20, 310, 181, 20))
self.meanStdButton.setObjectName("meanStdButton")
self.perButton = QtWidgets.QRadioButton(self.frame)
self.perButton.setGeometry(QtCore.QRect(20, 340, 161, 20))
self.perButton.setObjectName("perButton")
self.label = QtWidgets.QLabel(self.frame)
self.label.setGeometry(QtCore.QRect(30, 200, 121, 31))
self.label.setAlignment(QtCore.Qt.AlignCenter)
self.label.setObjectName("label")
self.area1Button = QtWidgets.QRadioButton(self.frame)
self.area1Button.setGeometry(QtCore.QRect(30, 110, 141, 20))
self.area1Button.setObjectName("area1Button")
self.area2Button = QtWidgets.QRadioButton(self.frame)
self.area2Button.setGeometry(QtCore.QRect(30, 130, 141, 20))
self.area2Button.setObjectName("area2Button")
self.bothButton = QtWidgets.QRadioButton(self.frame)
self.bothButton.setGeometry(QtCore.QRect(30, 150, 141, 20))
self.bothButton.setObjectName("bothButton")
self.label_5 = QtWidgets.QLabel(self.frame)
self.label_5.setGeometry(QtCore.QRect(30, 30, 121, 31))
self.label_5.setAlignment(QtCore.Qt.AlignCenter)
self.label_5.setObjectName("label_5")
self.label_6 = QtWidgets.QLabel(self.frame)
self.label_6.setGeometry(QtCore.QRect(10, 70, 171, 31))
self.label_6.setAlignment(QtCore.Qt.AlignCenter)
self.label_6.setObjectName("label_6")
self.widget = QtWidgets.QWidget(self.frame)
self.widget.setGeometry(QtCore.QRect(0, 0, 551, 391))
self.widget.setStyleSheet("background-color: rgb(186, 188, 162);")
self.widget.setObjectName("widget")
self.widget_5 = QtWidgets.QWidget(self.widget)
self.widget_5.setGeometry(QtCore.QRect(10, 30, 191, 151))
self.widget_5.setStyleSheet("background-color: rgb(210, 204, 204);")
self.widget_5.setObjectName("widget_5")
self.widget_6 = QtWidgets.QWidget(self.widget)
self.widget_6.setGeometry(QtCore.QRect(10, 200, 191, 171))
self.widget_6.setStyleSheet("background-color: rgb(210, 204, 204);")
self.widget_6.setObjectName("widget_6")
self.csvButton = QtWidgets.QPushButton(self.widget)
self.csvButton.setGeometry(QtCore.QRect(320, 210, 150, 50))
self.csvButton.setStyleSheet("background-color: rgb(210, 204, 204);")
self.csvButton.setObjectName("csvButton")
self.statusLabel = QtWidgets.QLabel(self.widget)
self.statusLabel.setGeometry(QtCore.QRect(320, 270, 151, 51))
self.statusLabel.setLayoutDirection(QtCore.Qt.LeftToRight)
self.statusLabel.setStyleSheet("")
self.statusLabel.setText("")
self.statusLabel.setAlignment(QtCore.Qt.AlignCenter)
self.statusLabel.setObjectName("statusLabel")
self.widget_6.raise_()
self.widget_5.raise_()
self.csvButton.raise_()
self.statusLabel.raise_()
self.widget.raise_()
self.noNormaButton.raise_()
self.minMaxButton.raise_()
self.meanStdButton.raise_()
self.perButton.raise_()
self.label.raise_()
self.area1Button.raise_()
self.area2Button.raise_()
self.bothButton.raise_()
self.label_5.raise_()
self.label_6.raise_()
self.frame_2 = QtWidgets.QFrame(self.centralwidget)
self.frame_2.setGeometry(QtCore.QRect(10, 420, 541, 201))
self.frame_2.setFrameShape(QtWidgets.QFrame.StyledPanel)
self.frame_2.setFrameShadow(QtWidgets.QFrame.Raised)
self.frame_2.setObjectName("frame_2")
self.loadDataButton = QtWidgets.QPushButton(self.frame_2)
self.loadDataButton.setGeometry(QtCore.QRect(40, 110, 150, 50))
self.loadDataButton.setStyleSheet("background-color: rgb(210, 204, 204);")
self.loadDataButton.setObjectName("loadDataButton")
self.showButton = QtWidgets.QPushButton(self.frame_2)
self.showButton.setGeometry(QtCore.QRect(350, 130, 150, 50))
self.showButton.setStyleSheet("background-color: rgb(210, 204, 204);")
self.showButton.setObjectName("showButton")
self.button3D = QtWidgets.QCheckBox(self.frame_2)
self.button3D.setGeometry(QtCore.QRect(50, 170, 131, 21))
self.button3D.setObjectName("button3D")
self.label_3 = QtWidgets.QLabel(self.frame_2)
self.label_3.setGeometry(QtCore.QRect(200, 10, 121, 31))
self.label_3.setAlignment(QtCore.Qt.AlignCenter)
self.label_3.setObjectName("label_3")
self.LoadFolderButton = QtWidgets.QPushButton(self.frame_2)
self.LoadFolderButton.setGeometry(QtCore.QRect(40, 50, 150, 50))
self.LoadFolderButton.setStyleSheet("background-color: rgb(210, 204, 204);")
self.LoadFolderButton.setObjectName("LoadFolderButton")
self.widget_4 = QtWidgets.QWidget(self.frame_2)
self.widget_4.setGeometry(QtCore.QRect(0, 0, 541, 201))
self.widget_4.setStyleSheet("background-color: rgb(186, 188, 162);")
self.widget_4.setObjectName("widget_4")
self.widget_4.raise_()
self.loadDataButton.raise_()
self.showButton.raise_()
self.button3D.raise_()
self.label_3.raise_()
self.LoadFolderButton.raise_()
self.frame_3 = QtWidgets.QFrame(self.centralwidget)
self.frame_3.setGeometry(QtCore.QRect(560, 20, 381, 601))
self.frame_3.setFrameShape(QtWidgets.QFrame.StyledPanel)
self.frame_3.setFrameShadow(QtWidgets.QFrame.Raised)
self.frame_3.setObjectName("frame_3")
self.loadRadioDataButton = QtWidgets.QPushButton(self.frame_3)
self.loadRadioDataButton.setGeometry(QtCore.QRect(20, 90, 150, 50))
self.loadRadioDataButton.setStyleSheet("background-color: rgb(210, 204, 204);")
self.loadRadioDataButton.setObjectName("loadRadioDataButton")
self.classifyButton = QtWidgets.QPushButton(self.frame_3)
self.classifyButton.setGeometry(QtCore.QRect(20, 150, 150, 50))
self.classifyButton.setStyleSheet("background-color: rgb(210, 204, 204);")
self.classifyButton.setObjectName("classifyButton")
self.label_2 = QtWidgets.QLabel(self.frame_3)
self.label_2.setGeometry(QtCore.QRect(130, 10, 121, 31))
self.label_2.setAlignment(QtCore.Qt.AlignCenter)
self.label_2.setObjectName("label_2")
self.label_4 = QtWidgets.QLabel(self.frame_3)
self.label_4.setGeometry(QtCore.QRect(190, 160, 121, 31))
self.label_4.setAlignment(QtCore.Qt.AlignCenter)
self.label_4.setObjectName("label_4")
self.widget_3 = QtWidgets.QWidget(self.frame_3)
self.widget_3.setGeometry(QtCore.QRect(0, 0, 381, 601))
self.widget_3.setStyleSheet("background-color: rgb(186, 188, 162);")
self.widget_3.setObjectName("widget_3")
self.show_classifier = QtWidgets.QLabel(self.widget_3)
self.show_classifier.setEnabled(True)
self.show_classifier.setGeometry(QtCore.QRect(20, 240, 350, 350))
self.show_classifier.setText("")
self.show_classifier.setObjectName("show_classifier")
self.widget_3.raise_()
self.loadRadioDataButton.raise_()
self.classifyButton.raise_()
self.label_2.raise_()
self.label_4.raise_()
self.widget_2 = QtWidgets.QWidget(self.centralwidget)
self.widget_2.setGeometry(QtCore.QRect(0, 0, 961, 641))
self.widget_2.setStyleSheet("background-color: rgb(81, 93, 78);")
self.widget_2.setObjectName("widget_2")
self.widget_2.raise_()
self.frame.raise_()
self.frame_2.raise_()
self.frame_3.raise_()
MainWindow.setCentralWidget(self.centralwidget)
self.retranslateUi(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
self.loadDataButton.clicked.connect(lambda: self.getFile())
self.showButton.clicked.connect(lambda: self.showImages())
self.csvButton.clicked.connect((lambda: self.radiomics()))
def getFile(self):
#Open window to choose file
self.filePath, _ = QFileDialog.getOpenFileNames(self.window, 'Choose an image', "${HOME}","Formats: (*.png )")
for filePath in self.filePath:
image = Image.open(filePath)
#convert image to greyscale
img_grey = image.convert('L')
filename = os.path.basename(filePath)
#make new folder
os.makedirs(self.output_dir, exist_ok=True)
#join a filname from original image to image after greyscale
output_path = os.path.join(self.output_dir, filename)
#save a greyscale image to new folder
img_grey.save(output_path)
#greyImage = Image.open(output_path)
#self.images.append(greyImage)
def showImages(self):
if self.images:
print("Number of images:", len(self.images))
showData(self.images)
else:
print("No files selected.")
def radiomics(self):
if self.radioButton.isChecked():
extractRadiomics(self.images)
def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "Textural analysis"))
self.noNormaButton.setText(_translate("MainWindow", "No normalization"))
self.minMaxButton.setText(_translate("MainWindow", "Min-Max normalization"))
self.meanStdButton.setText(_translate("MainWindow", "Mean/Std normalization"))
self.perButton.setText(_translate("MainWindow", "Percentile normalization"))
self.label.setText(_translate("MainWindow", "Normalization"))
self.area1Button.setText(_translate("MainWindow", "1"))
self.area2Button.setText(_translate("MainWindow", "2"))
self.bothButton.setText(_translate("MainWindow", "Both"))
self.label_5.setText(_translate("MainWindow", "Segmentation"))
self.label_6.setText(_translate("MainWindow", "Select the area to analyze:"))
self.csvButton.setText(_translate("MainWindow", "Generate CSV"))
self.loadDataButton.setText(_translate("MainWindow", "Load Data"))
self.showButton.setText(_translate("MainWindow", "Show Data"))
self.button3D.setText(_translate("MainWindow", "3D Image"))
self.label_3.setText(_translate("MainWindow", "Data"))
self.LoadFolderButton.setText(_translate("MainWindow", "Load Folder"))
self.loadRadioDataButton.setText(_translate("MainWindow", "Load Data"))
self.classifyButton.setText(_translate("MainWindow", "Classify"))
self.label_2.setText(_translate("MainWindow", "Classification"))
self.label_4.setText(_translate("MainWindow", "Classifier SVM"))
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
MainWindow = QtWidgets.QMainWindow()
ui = Ui_MainWindow()
ui.setupUi(MainWindow)
MainWindow.show()
sys.exit(app.exec_())
So I want clicked the button Load Data, choose images, next this images are converted to greyscale, and after that they are saved in a new folder, which is created immediately by the Load Data button.
Is it even possible to create a new folder while the application is running? If so, how can I do it ? I'm new in Python. If you need more information, please write.