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

Joh*_*ohn 15 python opencv python-2.7

我在python中使用opencv2代码

import cv2
cv2.namedWindow("output", cv2.WINDOW_NORMAL)       
cv2.imshow("output",im)
cv2.resizeWindow('output', 400,400)
cv2.waitKey(0)
cv2.destroyAllWindows()
Run Code Online (Sandbox Code Playgroud)

我有错误

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

我调试,发现它发生在我使用时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

Hil*_*ill 21

我遇到了同样的问题,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
Run Code Online (Sandbox Code Playgroud)

我将 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
Run Code Online (Sandbox Code Playgroud)

  • 这是该线程中唯一对我有用的答案!谢谢! (2认同)

小智 9

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

如果你使用的是 anaconda,只需写下:

$ conda 安装 pyqt

  • 这在使用 python 3.7 时对我有用。这应该被标记为正确答案。 (2认同)

Mat*_*haq 8

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

sudo pip uninstall opencv-python
Run Code Online (Sandbox Code Playgroud)

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

sudo apt-get install libopencv-dev python-opencv
Run Code Online (Sandbox Code Playgroud)

  • 这个“解决方案”基本上禁止使用虚拟环境。 (4认同)
  • 我正在使用 `virtualenv` 并且我的问题在 1. `$ pip uninstall opencv-python` 后仍然存在。2. `$ sudo apt-get install libopencv-dev python-opencv` 3. `$ pip install opencv-python` (2认同)
  • pip 中的 `opencv-python` 带有一个 opencv 3 库,但是 `apt` 中的 `python-opencv` 绑定使用的是 opencv2 的 `libopencv-dev` 库。所以我相信你的方法并不能解决那些需要在 python 中使用 opencv3 的人(和我)的问题。 (2认同)

a_g*_*est 5

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

解决方案是通过 安装 PyQt pip,即pip install PyQt5.


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