如何修复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-python
和matplotlib
:pip 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 下通过从 pip
和 apt
卸载任何 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-python
或opencv-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
现在只需通过
安装opencvpip install opencv-python
为我工作。
【讨论】:
以上是关于如何修复python中opencv中的错误“QObject::moveToThread:”?的主要内容,如果未能解决你的问题,请参考以下文章
Python,OpenCV中的图像修复——cv2.inpaint()
如何修复 Python 中的“ImportError:动态模块未定义模块导出函数 (PyInit_cv2)”错误?
基于OpenCV修复表格缺失的轮廓--如何识别和修复表格识别中的虚线