Des*_*ner 13 python opencv cv2
我在使用 cv2 模块运行简单代码时出错。
只是:
import cv2
img = cv2.imread('sudoku.png',0)
cv2.imshow('image',img)
Run Code Online (Sandbox Code Playgroud)
它失败并出现以下错误:
QObject::moveToThread: Current thread (0x1b74720) is not the object's thread (0x1e57d70).
Cannot move to target thread (0x1b74720)
Run Code Online (Sandbox Code Playgroud)
我在谷歌上搜索了这个错误并尝试了很多东西,但没有帮助。我尝试在没有 pip 的情况下安装,我尝试使用分步安装(来自官方 OpenCV)但没有任何帮助。
当我运行时:
cv2.__version__
Run Code Online (Sandbox Code Playgroud)
它返回 3.4.3
waT*_*eim 12
如前所述,这个问题的基础在opencv-python 问题 46 中讨论,并且是由于以下库在主机和 opencv-python 发行版libQtDBus libQtCore和libQtGui 上的重复造成的。
最近在最新版本的 opencv-python 中解决了这个问题。这不是对源代码的修复,而是强制pip通过以下方式编译新可用的源代码
pip install --no-binary opencv-python opencv-python
Run Code Online (Sandbox Code Playgroud)
这会导致 opencv-python 使用与宿主相同的库,因此冲突不再存在。
jmi*_*loy 12
我还没有花时间完全理解这个问题,但据我了解,这是由环境中某些插件的多个冲突版本引起的。我尝试安装构建 opencv-python 但该方法存在错误。另一个建议是更改您的导入顺序,但我的成功与否参半,而且我今天无法让它在项目中运行。
但我找到了一个对我有用的解决方法。安装opencv-python-headless而不是opencv-python. 这将避免安装冲突的插件。它可能不适合你,具体取决于你需要 opencv 的哪些功能。
$ pip uninstall opencv-python
$ pip install opencv-python-headless
Run Code Online (Sandbox Code Playgroud)
根据OpenCV GitHub 上发布的这个问题,这是一个已知问题,开发人员表示该问题几乎无法修复。这显然是由系统上的任何 Qt 安装与 OpenCV 附带的 Qt 冲突引起的。有一些建议可以libqt5x11extras5从系统中删除软件包。这可能会修复某些问题,但是在使用基于 Qt 的窗口管理器的 Linux 发行版上运行这些库的任何人都会通过删除此包(我自己尝试过)使他们的桌面环境无法使用。
您可以尝试使用WITH_GTK=ON运行cmake时使用 GTK 而不是 Qt的选项从源代码构建 OpenCV,从而避免冲突。然而,当使用虚拟环境时,这很难在 Python 中使用。
通过简单地更新一个库,该错误已在我的系统上得到修复。
要找出它来自哪里,假设是 Linux,请尝试以下操作,
LD_DEBUG=files python -c "import cv2"
Run Code Online (Sandbox Code Playgroud)
或者,
LD_DEBUG=files python -c "import cv2 ; img = cv2.imread('myimage.png',0) ; cv2.imshow('image',img) ; cv2.waitKey(0)"
Run Code Online (Sandbox Code Playgroud)
在我的机器上,它在 blas 库之一中失败。我更新了该库,代码现在运行没有错误。
这是一个老错误,您可以在许多在线社区中找到它的讨论。
我的测试代码如下。值得注意的是,该错误没有再次发生,并且显然与 Qt 无关。
import cv2
img = cv2.imread('sudoku.png',0)
cv2.imshow('image',img)
cv2.waitKey(0)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
14854 次 |
| 最近记录: |