如何修复python中opencv中的错误“QObject::moveToThread:”?

Posted

技术标签:

【中文标题】如何修复python中opencv中的错误“QObject::moveToThread:”?【英文标题】:How to fix the error "QObject::moveToThread:" in opencv in python? 【发布时间】:2018-03-09 01:24:03 【问题描述】:

我在python中使用opencv2的代码

import cv2
cv2.namedWindow("output", cv2.WINDOW_NORMAL)       
cv2.imshow("output",im)
cv2.resizeWindow('output', 400,400)
cv2.waitKey(0)
cv2.destroyAllWindows()

我的错误是

QObject::moveToThread: Current thread (0x1d2c9cf0) is not the object's thread (0x1d347b20).
Cannot move to target thread (0x1d2c9cf0)

我调试发现是在我使用cv2.waitKey(0)的时候出现的。我应该如何解决它?谢谢

更新:我使用的是 3.3.0.0。如果我使用旧版本,我有错误

OpenCV Error: Unspecified error (The function is not implemented. Rebuild the library with Windows, GTK+ 2.x or Carbon support. If you are on Ubuntu or Debian, install libgtk2.0-dev and pkg-config, then re-run cmake or configure script) in cvDestroyAllWindows, file /io/opencv/modules/highgui/src/window.cpp, line 577
Traceback (most recent call last):
  File "tools/demo_handbone.py", line 220, in <module>
    demo(net, im_name)
  File "tools/demo_handbone.py", line 159, in demo
    cv2.destroyAllWindows()
cv2.error: /io/opencv/modules/highgui/src/window.cpp:577: error: (-2) The function is not implemented. Rebuild the library with Windows, GTK+ 2.x or Carbon support. If you are on Ubuntu or Debian, install libgtk2.0-dev and pkg-config, then re-run cmake or configure script in function cvDestroyAllWindows

【问题讨论】:

我的猜测是 Qt 或最新版本的 opencv2 可能有错误发生了一些奇怪的事情。你最近升级了一个包吗? 对。我重新安装了opencv2,我遇到了问题。 尝试安装旧版本。你是用pip安装的吗? 是的。我用点子。如何在 python 中安装旧版本的 opencv?谢谢 pip install opencv-python== 将列出可用的版本。然后你就用pip install opencv-python==3.1.0.0,例如。 【参考方案1】:

我遇到了同样的问题,对我来说是 opencv-python 版本问题。 我的Linux机器环境如下:

$ cat /etc/lsb-release 
...
DISTRIB_DESCRIPTION="Ubuntu 18.04.5 LTS"
$ date
Tue Aug 11 11:43:16 KST 2020
$ python --version
Python 3.7.8
$ pip list|grep Qt
PyQt5                5.15.0
PyQt5-sip            12.8.0
$ pip list|grep opencv-python
opencv-python        4.3.0.38

我将 opencv-python 4.3.0.38 降级为 4.3.0.36

$ pip uninstall opencv-python
$ pip install opencv-python==4.3.0.36
$ pip list|grep opencv-python
opencv-python        4.3.0.36

【讨论】:

这是该线程中唯一对我有用的答案!谢谢! 这导致我出现以下错误:askubuntu.com/questions/342202/… 降级也对我有用。从4.5.3.56 降级到4.1.2.30【参考方案2】:

首先,卸载您可能已安装的任何版本的 OpenCV。如果你使用pip安装:

sudo pip uninstall opencv-python

接下来,尝试使用 Linux 发行版的包管理器安装 OpenCV。对于 Ubuntu/Debian,这是:

sudo apt-get install libopencv-dev python-opencv

【讨论】:

我正在使用virtualenv,我的问题在 1.$ pip uninstall opencv-python 之后仍然存在。 2.$ sudo apt-get install libopencv-dev python-opencv 3.$ pip install opencv-python opencv-python in pip 附带一个 opencv 3 库,但 python-opencv 绑定在 apt 使用 libopencv-dev 库,即 opencv2。所以我相信你的方法并不能解决那些需要在 python 中使用 opencv3 的人(和我)的问题。 不起作用(同样的错误仍然存​​在)。 python 中的 opencv-python-3.3.0.10 与 OS 中的 libopencv2.4 @TusharGoswami 遇到同样的问题,有什么更新吗? 这个“解决方案”基本上禁用了虚拟环境的使用。【参考方案3】:

我可以通过安装新的 pyqt 来解决这个问题。

如果您使用的是 anaconda,请在下面写下:

$ conda install pyqt

【讨论】:

这在使用 python 3.7 时对我有用。这应该被标记为正确答案。 pip 的类似包是什么? pip 中有一个名为 pyqt 的包。 这对我也有用 :) 谢谢 :)【参考方案4】:

如果您使用 Anaconda 虚拟环境并同时使用 conda install pyqt(1) pip install opencv-python,则可能会发生这种情况。这会在两个 PyQt 版本之间产生冲突(opencv-python 自带)并导致错误。

解决办法是通过pip安装PyQt,即pip install PyQt5


(1) 或任何依赖于pyqt 的东西,例如conda install matplotlib.

【讨论】:

【参考方案5】:

我解决了这个问题并发布了我的解决方案in related issue on OpenCV github page。但是为了您的方便,我也会在这里发布。

就我而言,我做了几乎所有的解决方案:

使用 pip3 install opencv-python 安装 使用 apt install python-opencv 安装 我关注了@areche solution,最后我得到了kdelibs5-plugins,这是我大多数桌面环境的一个重要模块,所以我放弃了卸载它。

最后,我找到了适合我的情况的解决方案

pip uninstall opencv-python 在我的 python 和虚拟环境的所有实例上 pip3 uninstall opencv-python 在我的 python 和虚拟环境的所有实例上 sudo apt remove python-opencv

然后我下载了最新的 opencv,在我的情况下为 opencv-4.1.1,我构建了它。 用于建筑:

mkdir build; cd build; ccmake .. 然后我按下c,再次按下c,然后按下g生成make文件,然后 sudo make -j8 构建成功后,我将build\lib\python3\cv2.cpython.xxxxxx.so复制到usr/local/lib/python3.5/dist-packages/并重命名为cv2.so 对您拥有的每个 virtualenv 执行相同的操作。 (我不确定这是否合乎逻辑,但它对我有用)。

然后一切正常,没有任何错误。

【讨论】:

这个问题似乎与KDE有关。完成areche_solution 之后,一切正常【参考方案6】:

openCv 作者说这个问题来自 openCv 和 linux 发行版中不同的 Qt 版本。即:openCv自带Qt4,但Qt5已经安装了。

【讨论】:

【参考方案7】:

参考:https://blog.csdn.net/flyfor2013/article/details/110132458

pip3 卸载 opencv-python

pip3 安装 opencv-python==4.1.1.26

当我降级 opencv-python 4.5 -> 4.1.1.26 然后就可以了

//

pip3 >= 20.3 使用:pip3 install --use-deprecated=legacy-resolver opencv-python==

pip3 >= 9.0 使用:pip3 install opencv-python==

我试试

pip3 卸载 opencv-python

pip3 安装 opencv-python==4.3.0.36

也好

【讨论】:

它似乎对我有用,版本 opencv-python 版本 4.2.0.34 或更低(python 版本 3.8.5 和 ubuntu 20.04【参考方案8】:

我尝试了上述方法,并且可以让 opencv 模块为我使用 python3.x 解释器的项目工作。

在进行了一些实验后,我通过以下步骤使其工作:

1) 在你的机器上安装 opencv-python 使用:

sudo pip3 install opencv-python

2) 在 python3.x 终端上找到版本:

>>> import cv2
>>> cv2.__version__
'3.4.1'

3) 从他们的official page 获取相同版本的 OpenCV。

4) 执行opencv tutorial 中提到的 CMake 设置。 注意 PYTHON3_PACKAGES_PATH

中指定的位置

5) 构建完成后,进入 PYTHON3_PACKAGES_PATH 中指定的安装位置。将名为 cv2.cpython-*-gnu.so 的库移动到当前 python3.x dist-packages 路径:

usr/local/lib/python3.5/dist-packages/cv2

6) 重新加载您的 python3 项目并重试!

【讨论】:

【参考方案9】:

如果在没有虚拟环境的情况下运行 opencv,则不会出现此问题。 我的系统: Kbuntu 18.04 LTS GTX 1050 CUDA 9.2 TensorFlow 1.9

【讨论】:

【参考方案10】:

当我尝试运行detectron2 演示时遇到了同样的问题。我的操作系统是 Centos7,我 卸载一些关于qt的应用。

查找有关 qt 的应用程序。

yum list installed |grep qt

删除应用程序

yum -y remove xxx...

【讨论】:

【参考方案11】:

此错误发生在更高版本的 openCv 中,如 4.3.0.38 或更高版本,我尝试使用 pip 的 4.3.0.36 版本并为我解决了这个问题,但在较低版本中我遇到了很多问题,比如窗口无法正确加载,如果使用的是 Ubuntu,我建议您从系统中完全卸载 opencv,并尝试使用下面给出的命令重新安装,

pip install opencv-contrib-python3

【讨论】:

pip install opencv-contrib-python3 错误:找不到满足要求的版本 opencv-contrib-python3 错误:没有找到与 opencv-contrib-python3 匹配的发行版【参考方案12】:

这是兼容性问题。甚至“conda install install pyqt”的方式也确实有效。请确保您可以安装特定版本的 opencv 库。更高版本可能会出现同样的问题。

pip install opencv-python==4.1.1.26
pip install opencv-contrib-python==4.1.1.26

干杯,

【讨论】:

【参考方案13】:

问题在于 OpenCV 版本,以下版本为我解决了所有问题。

pip uninstall opencv-python
pip install opencv-python==4.1.2.30

我正在使用 - 带有 conda 的 Python 3.8.5

我也尝试升级 pyqt,但没有成功

【讨论】:

【参考方案14】:

只要重新安装opencv-python lib就可以了。

pip uninstall opencv-python
pip install opencv-python=4.2.0.34

4.2版本是最新的opencv python,不会抛出这个错误。我试过 4.3 或者 4.4+ 都不行。

这个问题的主要原因可能是PyQt5和Opencv之间的冲突。

【讨论】:

我有这个版本,“opencv-python==4.2.0.34”,我收到很多这个错误:(【参考方案15】:

我遇到了同样的问题,但没有找到任何解决方案。通过反复试验,我发现我的OpenCV 版本已损坏。结果,我删除了它并安装了一个新的。您可以使用以下两个选项之一: 1。终端 运行brew uninstall opencv3 卸载opencv 然后使用sudo apt-get install libopencv-dev python-opencv 命令安装它。

2。蟒蛇 其实我是用这个方法解决我自己的问题的。

    打开蟒蛇 转到环境部分并选择您的环境,如下所示: 然后点击安装并搜索opencv: 选择opencv包并卸载它。然后尝试通过选择未安装并搜索opencv 来重新安装opencv。小心安装正确的版本。

【讨论】:

【参考方案16】:

这个问题是由于opencv-python自带的Qt5和其他包使用的Qt5冲突造成的。在我的例子中,matplotlib 是通过conda 安装的,然后pyqt 也作为matplotlib 的依赖项安装。我的解决方案如下:

    卸载matplotlib:conda remove matplotlib 安装opencv-pythonmatplotlibpip install matplotlib opencv-python

现在,通过pip 安装的matplotlib 不需要pyqt 并且冲突已解决。

注意:最新版本 4.5.4.x 出现 python 3.9 错误,在这种情况下考虑使用较低版本,例如 4.5.1.x。

【讨论】:

【参考方案17】:

如果您拥有 Ubuntu 17 及更高版本,@Mateen 的答案非常有用。对于 Ubuntu 16,最好从源代码编译你的 opencv python。正如@Varun 提到的,请关注opencv tutorial。但是,要使用 python 3 成功编译 opencv,我必须在 cmake 命令中添加一些标志:

cmake -DCMAKE_BUILD_TYPE=RELEASE -DPYTHON_DEFAULT_EXECUTABLE=$(which python3) -DPYTHON_INCLUDE_DIR2=/usr/include/x86_64-linux-gnu/python3.5m/ -DPYTHON3_NUMPY_INCLUDE_DIRS=/usr/local/lib/python3.5/dist-packages/numpy/core/include/ ..

希望这会有所帮助。

【讨论】:

【参考方案18】:

我在 Ubuntu 18.04 LTS 下通过从 pipapt 卸载任何 OpenCV 软件包并直接从源代码安装 OpenCV 来解决此问题。也许本教程会有所帮助:

https://www.pyimagesearch.com/2018/08/15/how-to-install-opencv-4-on-ubuntu/

【讨论】:

【参考方案19】:

我不知道为什么,但是安装 matplotlib 为我解决了错误问题

QObject::moveToThread: Current thread (0x1d2c9cf0) is not the object's thread (0x1d347b20).
Cannot move to target thread (0x1d2c9cf0)

我强调我准备了安装 matplotlib 的全新 conda 环境。 Opencv 由 pip 在 conda env 中安装,如下pip install opencv-python opencv-contrib-python

【讨论】:

您应该安装opencv-pythonopencv-contrib-python,而不是两者,根据第二个软件包的官方文档。【参考方案20】:

我遵循了@Varun 建议的解决方案,它对我有用(使用 Python 3)。 但是,我没有安装构建的文件,因为我在需要 cv 包的系统上没有管理员权限。 cmake,然后是 make 就足够了,然后我从 ../build/lib/python3 文件夹中取出 cv2.*.gnu 文件并替换了我的虚拟环境的 site-packages/cv2 文件夹中的文件

【讨论】:

【参考方案21】:

这可能是由 Qt 库的安装冲突引起的。以下命令为我修复了它:

sudo apt-get remove libqt5x11extras5 libqt5x11extras5-dev

【讨论】:

这会删除重要的系统库,并使您的系统无法使用。除非您确切知道它的作用,否则不要运行它。【参考方案22】:

我遇到了同样的问题。使用 opencv imshow 函数引发了移动线程错误。最终,我发现 Ubuntu 16.04 预装了 pyqt5,而 OpenCV 需要 pqty4。 因此,这可能是由 Qt 库的安装冲突引起的。以下命令为我修复了它:

sudo apt-get remove libqt5x11extras5 libqt5x11extras5-dev

【讨论】:

【参考方案23】:

我知道这个帖子有点老了,但是为其他人发帖,我遇到了同样的问题,这是因为即使在运行之后

pip3 uninstall opencv-python

我的系统中有另一个版本的 open-cv,我检查过

pip list

(我猜 pip 只会删除它找到的第一个版本) 所以我再次运行了这个命令

pip3 uninstall opencv-python

现在只需通过

安装opencv
pip install opencv-python

为我工作。

【讨论】:

以上是关于如何修复python中opencv中的错误“QObject::moveToThread:”?的主要内容,如果未能解决你的问题,请参考以下文章

Python,OpenCV中的图像修复——cv2.inpaint()

如何修复 Python 中的“ImportError:动态模块未定义模块导出函数 (PyInit_cv2)”错误?

基于OpenCV修复表格缺失的轮廓--如何识别和修复表格识别中的虚线

如何使用 Python 修复 Pyx 模块中的回溯错误?

如何修复python中graphql查询中的“解析错误(VAR_SIGN)”

如何修复 spyder for python 中的导入错误“nvcuda.dll”?