【问题标题】:How to fix the error "QObject::moveToThread:" in opencv in python?如何修复python中opencv中的错误“QObject::moveToThread:”?
【发布时间】: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,例如。

标签: python python-2.7 opencv


【解决方案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。蟒蛇 其实我是用这个方法解决我自己的问题的。

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

                【讨论】:

                  【解决方案16】:

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

                  1. 卸载matplotlib:conda remove matplotlib
                  2. 安装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
                            

                            为我工作。

                            【讨论】:

                              猜你喜欢
                              • 2019-03-28
                              • 2018-04-05
                              • 1970-01-01
                              • 1970-01-01
                              • 1970-01-01
                              • 2020-10-02
                              • 2021-09-16
                              • 2019-11-13
                              • 1970-01-01
                              相关资源
                              最近更新 更多