【问题标题】:How to use Qstring for cv2.imread PyQT4如何将 Qstring 用于 cv2.imread PyQT4
【发布时间】:2018-02-27 04:52:20
【问题描述】:

我是 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")

我愿意接受任何参考或方法。

提前致谢。

【问题讨论】:

  • 感谢您帮助我将这篇文章编辑成正确的格式。

标签: python python-2.7 opencv pyqt4 qpixmap


【解决方案1】:

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 类型而不是上面列出的类型,并且您的错误将消失。

【讨论】:

  • 谢谢。这正是我所需要的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-05-08
  • 1970-01-01
  • 2018-11-17
  • 2010-11-26
  • 2019-09-17
  • 2021-04-05
  • 2017-11-17
相关资源
最近更新 更多