如何使用Qstring for cv2.imread PyQT4

时间:2018-02-27 04:52:21

标签: python python-2.7 opencv pyqt4 qpixmap

我是python的新手。我正在构建我的第一个应用程序我的问题可能很简单,但我确实需要帮助。我有2个标签和2个按钮。

第一个按钮调用功能browse并浏览图像文件并在标签1上设置图像。然后,第二个按钮调用功能applyBrowsedImage并从标签1获取图像并设置它到cv2.imread,所以它可以用于图像处理。

但程序显示错误:

  

TypeError:期望的字符串或Unicode对象,找到QString

def browse(self, path):
    filePath = QtGui.QFileDialog.getOpenFileName(self, 'a file','*.jpg')
    self.path = filePath
    fileHandle = open(filePath, 'r')
    pixmap = QPixmap(filePath)
    self.label1.setPixmap(pixmap)

def ApplyBrowsedImage(self):
    ##a = cv2.imread('image.jpg')   it works here
    a = cv2.imread(self.path) ##but does not work here
    pixmap = QPixmap(a)
    self.label2.setPixmap(pixmap)
    print("not yet")

我对任何参考或方法持开放态度。

提前致谢。

1 个答案:

答案 0 :(得分:0)

Qt为字符串之类的东西提供了一些自己的类型,因为Qt是一个C ++库,显然这些东西在C ++中很难。使用PyQt时,您可以选择使用Qt字符串(QString)或Python本机字符串。旧版本的PyQt(PyQt4)默认使用QString,因为新版本(PyQt5)使用Python字符串。

我认为最好的选择是使用本机Python类型,这使您可以轻松地与其他库相结合,这些库也需要本机Python类型而不需要进行大量烦人的转换。

为此,在导入PyQt之前 (所以将它放在你启动的python脚本的顶部),添加以下代码:

# do this BEFORE importing PyQt for the first time
import sip
for name in ["QDate", "QDateTime", "QString", "QTextStream", "QTime", "QUrl", "QVariant"]:
    sip.setapi(name, 2)
# now you can import PyQt...

这确保您使用本机Python类型而不是上面列出的类型,并且您的错误将消失。