我在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
答案 0 :(得分:5)
我遇到了同样的问题,对我来说是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
答案 1 :(得分:4)
首先,卸载您可能已安装的任何OpenCV版本。如果您使用sudo pip uninstall opencv-python
安装:
sudo apt-get install libopencv-dev python-opencv
接下来,尝试使用Linux发行版的软件包管理器安装OpenCV。对于Ubuntu / Debian,这是:
HomeFragment
答案 2 :(得分:4)
如果您使用 Anaconda 虚拟环境并同时执行 conda install pyqt
(1) 和 pip install opencv-python
,则可能会发生这种情况。这会在两个 PyQt 版本(opencv-python
自带)之间产生冲突并导致错误。
解决方案是通过pip
安装PyQt,即pip install PyQt5
。
(1) 或者任何依赖于 pyqt
的东西,例如conda install matplotlib
.
答案 3 :(得分:2)
我已解决此问题,并发布了解决方案in related issue on OpenCV github page。但是为了方便起见,我也将其张贴在这里。
就我而言,我几乎完成了所有解决方案:
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
来生成文件,然后
sudo make -j8
成功构建后,我将build\lib\python3\cv2.cpython.xxxxxx.so
复制到usr/local/lib/python3.5/dist-packages/
并将其重命名为cv2.so
对每个虚拟环境执行相同的操作。 (我不确定这是否合乎逻辑,但对我有用)。
然后一切正常,没有任何错误。
答案 4 :(得分:1)
我在Ubuntu 18.04 LTS下通过从pip
和apt
卸载任何OpenCV软件包并直接从源代码安装OpenCV来解决此问题。也许本教程会有所帮助:
https://www.pyimagesearch.com/2018/08/15/how-to-install-opencv-4-on-ubuntu/
答案 5 :(得分:1)
参考:https://blog.csdn.net/flyfor2013/article/details/110132458
pip3 卸载 opencv-python
pip3 install 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 install opencv-python==4.3.0.36
也行
答案 6 :(得分:1)
我能够通过安装新的pyqt来解决此问题。
如果您正在使用anaconda,请在下面写下:
$ conda安装pyqt
答案 7 :(得分:1)
这可能是由于Qt库的安装冲突引起的。以下命令为我修复了该问题:
sudo apt-get删除libqt5x11extras5 libqt5x11extras5-dev
答案 8 :(得分:0)
重新安装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的冲突。
答案 9 :(得分:0)
问题出在 OpenCV 版本上,以下版本为我解决了所有问题。
pip uninstall opencv-python
pip install opencv-python==4.1.2.30
我正在使用 - Python 3.8.5 和 conda
我也尝试升级pyqt,但没有用
答案 10 :(得分:0)
这是兼容性问题。甚至“conda install install pyqt”的方式也行。请确保您可以安装特定版本的 opencv 库。更高版本可能会出现同样的问题。
pip install opencv-python==4.1.1.26
pip install opencv-contrib-python==4.1.1.26
干杯,
答案 11 :(得分:0)
这个错误发生在更高版本的 openCv 中,比如 4.3.0.38 或更高版本,我用 pip 尝试了 4.3.0.36 版本,这个问题为我解决了,但是在较低版本中我遇到了很多问题,比如窗口加载不正确,如果使用的是 Ubuntu,我建议您从系统中完全卸载 opencv,然后尝试使用下面给出的命令重新安装,
pip install opencv-contrib-python3
答案 12 :(得分:0)
我知道线程有点旧,但是发布给其他人,我遇到了同样的问题,这是因为即使在运行之后
pip3 uninstall opencv-python
我检查过系统中的另一个open-cv版本
pip list
(我猜pip只会删除它找到的第一个版本) 所以我再次运行了该命令
pip3 uninstall opencv-python
现在只需安装opencv by
pip install opencv-python
为我工作。
答案 13 :(得分:0)
当我尝试运行detectron2演示时,我遇到了同样的问题。我的操作系统是Centos7,而我 卸载一些有关qt的应用程序。
找到有关qt的应用程序。
yum list installed |grep qt
删除应用程序
yum -y remove xxx...
答案 14 :(得分:0)
我有同样的问题。使用opencv imshow函数会引发移动线程错误。最终,我发现Ubuntu 16.04预先安装了pyqt5,而OpenCV需要pqty4。 因此,这可能是由于Qt库的安装冲突引起的。以下命令为我修复了该问题:
sudo apt-get remove libqt5x11extras5 libqt5x11extras5-dev
答案 15 :(得分:0)
我遵循@Varun建议的解决方案,它对我有用(使用Python 3)。
但是,我没有安装生成的文件,因为我在需要cv软件包的系统上没有管理员权限。一个True
,然后是cmake
就足够了,然后我从make
文件夹中取出了cv2.*.gnu
文件,并替换了我的虚拟环境的../build/lib/python3
文件夹中的文件
答案 16 :(得分:0)
openCv作者说此问题来自openCv和Linux发行版中的不同Qt版本。即:Qt4附带了openCv,但已经安装了Qt5。
答案 17 :(得分:0)
我不知道为什么,但是安装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
。
答案 18 :(得分:0)
如果您具有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/ ..
希望会有所帮助。
答案 19 :(得分:0)
如果在没有virtualenviroment的情况下运行opencv,则不会出现此问题。 我的系统: Kbuntu 18.04 LTS GTX 1050 CUDA 9.2 Tensorflow 1.9
答案 20 :(得分:0)
我尝试了上面提到的方法,并且可以使用opencv模块为我的项目工作,该项目使用python3.x解释器。
在进行了一些实验之后,我通过以下步骤使其工作:
1)使用以下命令在您的机器上安装opencv-python:
def findMatch(word: String): String => Boolean = { s =>
Option(s) match {
case Some(validText) => if (word.toLowerCase.r.findAllIn(validText.toLowerCase).nonEmpty) true else false
case None => false
}
}
2)在python3.x终端上找到版本:
distance
3)从official page获取相同版本的OpenCV。
4)执行opencv tutorial中提到的CMake设置。 请注意 PYTHON3_PACKAGES_PATH
中指定的位置5)执行构建后,进入 PYTHON3_PACKAGES_PATH 中指定的安装位置。将名为 cv2.cpython - * - gnu.so 的库移动到当前的python3.x dist-packages路径:
match(n:Company)
WHERE NOT (n)-[:refersTo]->() and n.name starts with "google"
with n as company, apoc.text.distance('google', n.name_lower) as distance
with company, collect(distance) as distances, avg(distance) as distAvg
unwind distances as distance
return company.name as name, distance, distAvg
6)重新加载你的python3项目,然后再试一次!