图像处理 PyQt 应用程序中的线程方法
threading method in imageprocessing PyQt application
我开发了一个程序,它不断地 "watching" 一个特定的文件夹,当一些图像被复制到那个文件夹时,从另一个 class 调用一个函数并开始处理。问题是这些图像很大,所以每当图像处理功能启动时,ui 就会冻结,直到过程结束。我了解到 QThread 可能是解决方案,但是当我在 class...
中有很多功能时,我不知道如何应用它
更具体的,请看步骤顺序。
class Main(QtGui.QMainWindow):
def __init__():
functions = Functions()
...
self.something.signal.connect(self.functions.doStuff)
class Functions(QtCore.QObject):
def __init__():
imProc = ImageProcessing()
def doStuff():
initialImage = loadimage(...)
processedImage = imProc.process1(initialImage)
class ImageProcessing(QtCore.QObject)
def __init__():
def process1(original_image):
do maximum likelihood on the image
return segmented image
def process2(original_image):
do another image processing task
return segmented image
if __name__ == '__main__':
app = QtGui.QApplication(sys.argv)
main = Main()
main.show()
main.exec_()
问题是当 process1() 运行 主 window 冻结时...请问如何 运行 process1() 在后台与ui?
提前致谢!
好的,我明白了。我给出了一个通用的描述,我是如何解决它的:
首先是我的 ImageProcessing class...
class ImageProcess(QtCore.QThread):
def __init__(self):
QtCore.QThread.__init__(self)
def __del__(self):
self.exiting = True
self.wait()
def run(self):
#machine learning algorithm, which results a processed image...
self.emit( QtCore.SIGNAL('image'), processedImage)
return
我有我的功能class...
class Functions(QtCore.QObject):
def __init__():
self.improc = ImageProcess()
self.connect(self.improc, SIGNAL("image"), self.processImage)
self.segmented_image = []
self.improc.setPath(self.image)
self.improc.start()
def processImage(self,seg_img):
self.segmented_image = seg_img
然后像往常一样设置 QMainWindow...
希望它对正在使用 Qthread、信号槽应用程序的人有所帮助...
我开发了一个程序,它不断地 "watching" 一个特定的文件夹,当一些图像被复制到那个文件夹时,从另一个 class 调用一个函数并开始处理。问题是这些图像很大,所以每当图像处理功能启动时,ui 就会冻结,直到过程结束。我了解到 QThread 可能是解决方案,但是当我在 class...
中有很多功能时,我不知道如何应用它更具体的,请看步骤顺序。
class Main(QtGui.QMainWindow):
def __init__():
functions = Functions()
...
self.something.signal.connect(self.functions.doStuff)
class Functions(QtCore.QObject):
def __init__():
imProc = ImageProcessing()
def doStuff():
initialImage = loadimage(...)
processedImage = imProc.process1(initialImage)
class ImageProcessing(QtCore.QObject)
def __init__():
def process1(original_image):
do maximum likelihood on the image
return segmented image
def process2(original_image):
do another image processing task
return segmented image
if __name__ == '__main__':
app = QtGui.QApplication(sys.argv)
main = Main()
main.show()
main.exec_()
问题是当 process1() 运行 主 window 冻结时...请问如何 运行 process1() 在后台与ui?
提前致谢!
好的,我明白了。我给出了一个通用的描述,我是如何解决它的:
首先是我的 ImageProcessing class...
class ImageProcess(QtCore.QThread):
def __init__(self):
QtCore.QThread.__init__(self)
def __del__(self):
self.exiting = True
self.wait()
def run(self):
#machine learning algorithm, which results a processed image...
self.emit( QtCore.SIGNAL('image'), processedImage)
return
我有我的功能class...
class Functions(QtCore.QObject):
def __init__():
self.improc = ImageProcess()
self.connect(self.improc, SIGNAL("image"), self.processImage)
self.segmented_image = []
self.improc.setPath(self.image)
self.improc.start()
def processImage(self,seg_img):
self.segmented_image = seg_img
然后像往常一样设置 QMainWindow...
希望它对正在使用 Qthread、信号槽应用程序的人有所帮助...