如何将QLabel传递给openCV cv2.imread

时间:2014-12-27 18:56:24

标签: python python-2.7 opencv image-processing pyqt

我正在尝试使用pyqt4导入图像我正在使用Qlabel显示它。 现在我想对这个图像做一些预处理,即GrayScale,去噪和分割。 单击工具栏中的操作按钮时显示更改。

以下是我使其工作的代码

from PyQt4 import QtCore, QtGui
from main_window import Ui_MainWindow
import cv2

class module_one(QtGui.QMainWindow, Ui_MainWindow):
    "Module One i.e Pre-processing of the Project Handwriting analysis"
    def __init__(self,parent=None):
        "Initilization of Class module_one" 
        super(module_one,self).__init__(parent)
        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)
        self.createActions()
    #Open Function  
    def open(self):
        filename = QtGui.QFileDialog.getOpenFileName(self, "Open Image", QtCore.QDir.currentPath(), "Image Files (*.jpg *.jpeg)")
        if filename:
            image = QtGui.QPixmap(filename)
            self.ui.label.setPixmap(image)
            if image.isNull():
                QtGui.QMessageVox.information(self,"Image Viewer","Cannot load %s."%filename)
                return

    #Function that will convert the image into grayscale
    def gray_scale(self):
        image = cv2.imread(self.ui.label) **#Gives Error here**
        gray_scale = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
        self.ui.label.setPixmap(gray_scale)

    #Function that will connect all buttons to its function             
    def createActions(self):
        self.ui.actionOpen.triggered.connect(self.open)
        self.ui.actionExit.triggered.connect(QtGui.qApp.quit)
        self.ui.actionGray_Scale_Conversion.triggered.connect(self.gray_scale)

出现以下错误

image = cv2.imread(self.ui.label)
TypeError: expected string or Unicode object, QLabel found

我知道我正在传递Qlabel及其期待的字符串或unicode对象。 但是,我不知道如何解决这个问题。 请有人告诉我该怎么做或如果你有更好的解决方案请提出。

P.S:我正在使用PyQt4 Designer和OpenCV版本2.4.8

1 个答案:

答案 0 :(得分:0)

AFAIK,cv2.imread()需要一个文件名,因此它会抛出 TypeError:期望的字符串或Unicode对象,找到QLabel

因此,在您的情况下,仅传递文件名 QLabel (self.ui.label)更有意义。