37

I am using opencv2 in python with the code

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

I have the error as

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

I debug and found that it happened when I use cv2.waitKey(0). How should I fix it? Thanks

Update: I am using 3.3.0.0. If I use older version, I have error

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
Christoph Rackwitz
  • 11,317
  • 4
  • 27
  • 36
John
  • 2,838
  • 7
  • 36
  • 65
  • My guess is something odd happened regarding either Qt or the most recent version of opencv2 might have a bug. Did you just upgrade a package recently? – Mateen Ulhaq Sep 28 '17 at 02:02
  • Right. I have reinstall opencv2 and I got the problem. – John Sep 28 '17 at 02:07
  • Try installing an older version. Did you use pip to install? – Mateen Ulhaq Sep 28 '17 at 02:08
  • Yes. I use pip. How can I install an older version of opencv in python? Thanks – John Sep 28 '17 at 02:11
  • `pip install opencv-python==` will list the available versions. Then you do `pip install opencv-python==3.1.0.0`, for example. – Mateen Ulhaq Sep 28 '17 at 02:13
  • Thanks. I am using version 3.3.0.0. I tried to use older version but I got the error as my update question – John Sep 28 '17 at 02:20
  • 1. Run `sudo pip uninstall opencv-python`. 2. Which distro of Linux are you running? If it's Ubuntu/Debian, `sudo apt-get install libopencv-dev python-opencv`. – Mateen Ulhaq Sep 28 '17 at 02:33
  • It worked now. Thanks so much. I will delete the question. Is it ok? – John Sep 28 '17 at 02:36
  • Nice. I'll put it in answer format. (My friend was having the same error.) – Mateen Ulhaq Sep 28 '17 at 02:37
  • If you have KDE installed, there is a conflict between system Qt and the wheel-bundled version. `sudo apt remove libqt5x11extras5` fixed the problem for me _BUT_ will basically kill KDE, so beware if you use that as your main gui. See: https://github.com/skvark/opencv-python/issues/46 – Akh Sep 18 '18 at 19:47

29 Answers29

30

I got same problem, it was from opencv-python version problem for me.
My Linux machine's environment is as following:

$ 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

I downgraded opencv-python 4.3.0.38 to 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
Bora
  • 1,402
  • 16
  • 19
Hill
  • 3,391
  • 3
  • 24
  • 28
  • This is the only answer in this thread that worked for me! Thanks! – qalis Aug 29 '20 at 10:40
  • This lead to the following error for me: https://askubuntu.com/questions/342202/failed-to-load-module-canberra-gtk-module-but-already-installed – Martin Hahner Sep 16 '20 at 14:07
  • Downgrading worked also for me. Did a more strong downgrade from `4.5.3.56` to `4.1.2.30` – iGian Aug 11 '21 at 11:06
19

First of all, uninstall any versions of OpenCV you may have installed. If you installed using pip:

sudo pip uninstall opencv-python

Next, try installing OpenCV using your Linux distro's package manager. For Ubuntu/Debian, this is:

sudo apt install libopencv-dev python3-opencv
larsaars
  • 2,065
  • 3
  • 21
  • 32
Mateen Ulhaq
  • 24,552
  • 19
  • 101
  • 135
12

This can happen if you are using an Anaconda virtual environment and did both conda install pyqt(1) and pip install opencv-python. This creates a conflict between the two PyQt versions (opencv-python ships with its own) and causes the errors.

The solution is to install PyQt via pip, i.e. pip install PyQt5.


(1) Or anything that depends on pyqt, e.g. conda install matplotlib.

a_guest
  • 34,165
  • 12
  • 64
  • 118
9

I was able to fix this problem by installing new pyqt.

if you are using anaconda, just write down below:

$ conda install pyqt

Jungwon Choi
  • 149
  • 2
  • 6
4

I solved this issue and I posted my solution in related issue on OpenCV github page. But for your convenience, I will post it here also.

In my case, I did almost all the solutions:

  • installing using pip3 install opencv-python
  • installing using apt install python-opencv
  • I followed @areche solution, I end up with kdelibs5-plugins which was an important module for most of my desktop environments, so I give up on uninstalling it.

Finally, I found a solution for my case

  • pip uninstall opencv-python on all instances of my python and virtual environments
  • pip3 uninstall opencv-python on all instances of my python and virtual environments
  • sudo apt remove python-opencv

then I downloaded the most recent opencv, in my case opencv-4.1.1 , I build it. for building :

mkdir build; cd build; ccmake .. then I pressed pressed c, again pressed c, then pressed g to generate make files, then sudo make -j8 after successful building, I copied build\lib\python3\cv2.cpython.xxxxxx.so to usr/local/lib/python3.5/dist-packages/ and renamed it to cv2.so Do the same for each virtualenv that you have. ( I'm not sure if it is logical, but it worked for me).

then everything worked fine without any error.

  • The problem seems to be related with KDE. After doing the [areche_solution](https://github.com/skvark/opencv-python/issues/46#issuecomment-495694090) everything worked just fine – ignacio Apr 23 '20 at 12:01
4

refer to: https://blog.csdn.net/flyfor2013/article/details/110132458

pip3 uninstall opencv-python

pip3 install opencv-python==4.1.1.26

when I downgrade opencv-python 4.5 -> 4.1.1.26 then Ok

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

pip3 >= 9.0 use: pip3 install opencv-python==

and I try

pip3 uninstall opencv-python

pip3 install opencv-python==4.3.0.36

Ok, too

Mateen Ulhaq
  • 24,552
  • 19
  • 101
  • 135
  • 2
    It seems to work for me, with version `opencv-python` version `4.2.0.34` or less (python version `3.8.5` and ubuntu `20.04`. – Come get some Mar 05 '21 at 15:37
4

Just reinstall opencv-python lib, it's OK.

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

The version 4.2 is the latest opencv python that don't throw this error. I tried 4.3 or 4.4 +, it's don't work.

The main reason of this question may be the conflict between PyQt5 and OpenCV.

socasanta
  • 1,532
  • 9
  • 15
Kun Zhan
  • 51
  • 3
3

The openCv author says that this problem comes from different Qt versions in openCv and the linux distro. That is: openCv comes with Qt4, but Qt5 is already installed.

3

This problem is due to the conflict between opencv-python's own Qt5 and the one used by other packages. In my case, matplotlib is installed via conda, then pyqt is also installed as a matplotlib's dependency. My solution is as follows:

  1. Uninstall matplotlib: conda remove matplotlib
  2. Install opencv-python and matplotlib: pip install matplotlib opencv-python

Now, matplotlib installed via pip doesn't require pyqt and the conflict is solved.

Note: The latest version 4.5.4.x gets error with python 3.9, consider using lower version such as 4.5.1.x in this case.

huyfam
  • 51
  • 2
2

The issue is with OpenCV version, The following version solved all issues for me.

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

I am using - Python 3.8.5 with conda

I tried with upgrading pyqt too but it didn't work

Vinay Verma
  • 877
  • 8
  • 15
1

I tried the above mentioned method and could get opencv module working for my project which uses python3.x interpreter.

After performing few experiments, i got it working by doing the below steps:

1) Install opencv-python in your machine using:

sudo pip3 install opencv-python

2) On the python3.x terminal find the version:

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

3) Get the same version of OpenCV from their official page.

4) Perform the CMake settings as mentioned in opencv tutorial. Note the location specified in PYTHON3_PACKAGES_PATH

5) Once build has been performed, got to the install location specified in PYTHON3_PACKAGES_PATH. Move the library named cv2.cpython-*-gnu.so to the current python3.x dist-packages path:

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

6) Reload your python3 project and try again!

Varun Vijaykumar
  • 355
  • 6
  • 18
0

This problem not present if runing opencv without virtualenviroment. My system: Kbuntu 18.04 LTS GTX 1050 CUDA 9.2 Tensorflow 1.9

0

I had the same problem when i tried to run a detectron2 demo. My OS is Centos7 and i uninstall some applications about qt.

find applications about qt.

yum list installed |grep qt

remove applications

yum -y remove xxx...
ligansss
  • 23
  • 3
0

This error occurs in higher versions of openCv like 4.3.0.38 or higher, i tried 4.3.0.36 version with pip and this problem solved for me, but in lower version i were facing lots of problems, like window not loading correctly,If are using Ubuntu i would recommend you to uninstall opencv from your system completely and try to reinstall with command given below,

pip install opencv-contrib-python3
Sudhanshu
  • 704
  • 1
  • 9
  • 24
  • pip install opencv-contrib-python3 ERROR: Could not find a version that satisfies the requirement opencv-contrib-python3 ERROR: No matching distribution found for opencv-contrib-python3 – Mona Jalal Jan 26 '21 at 17:43
0

It is the compatibility issue. Even the way of "conda install install pyqt" does work. Please make sure that you can install the opencv libraries with the specific versions. Higher versions may incur the same issues.

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

Cheers,

Mike Chen
  • 377
  • 3
  • 5
0

I had the same problem and I did not find any solution. By trial and error, I found that my OpenCV version is corrupted. As a result, I deleted it and install a new fresh one. You can use one of these two options: 1. Terminal run brew uninstall opencv3 to uninstall opencv then install it using sudo apt-get install libopencv-dev python-opencv command.

2. Anaconda Actually, I used this method for my own problem.

  1. open anaconda
  2. go to the environment section and select your environment as follow: enter image description here then click on installed and search for opencv: enter image description here select opencv package and uninstall it. then try to re-install opencv by selecting not installed and searching for opencv. be careful to install the correct version. enter image description here
Abbasihsn
  • 2,075
  • 1
  • 7
  • 17
0

In my application I wanted to use PyQt without any of opencv's GUI functionality, so the solution was to remove my current vertion of opencv-python, then instead pip install opencv-python-headless (or opencv-contrib-python-headless if you prefer). That way, opencv would be installed without its conflicting Qt library.

See: https://github.com/opencv/opencv-python#installation-and-usage

Luke
  • 11,374
  • 2
  • 48
  • 61
0

Downgrade the python version from 3.9.13 to 3.8.10

conda install python=3.8.10

pip install opencv-python==4.5.2.54

worked for me.

0

My system environment: Ubuntu 20.04 Anaconda 3.8

I was used matplotlib to display images and face this problem.
pip install opencv-python-headless not work for me.

pip uninstall pyqt5 then pip install pyqt5==5.12 and it works well.

Alicas
  • 11
  • 2
  • Your answer could be improved with additional supporting information. Please [edit] to add further details, such as citations or documentation, so that others can confirm that your answer is correct. You can find more information on how to write good answers [in the help center](/help/how-to-answer). – xlmaster Feb 23 '23 at 19:43
0

Was facing the same error but from a different module but the problem remains the same my opencv is not compatible with the module I am using after searching every where found this solution.

pip install opencv-python-headless

Might not work but you can easily revert the change but removing the pip

pip uninstall opencv-python-headless

renish p.r
  • 105
  • 1
  • 5
0

I encountered the same issue, and I have resolved it. The reason was that I had installed opencv-python version 4.8 using pip while also installing opencv version 4.5 using conda.

pip install opencv-python
conda install opencv==4.5 -c conda-forge

This may have caused a conflict, but I resolved the issue by uninstalling opencv-python.

pip uninstall opencv-python
-1

The answer of @Mateen works great if you have Ubuntu version 17 and above. For Ubuntu 16, it's better to compile from sources your opencv python. As @Varun mentioned, follow the opencv tutorial. However, to successfully compile opencv with python 3 I have to add some flags in cmake command:

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/ ..

Hope that will be helpful.

ptphucbk
  • 124
  • 4
-1

I fixed this under Ubuntu 18.04 LTS by uninstalling any OpenCV packages from pip and apt and installing OpenCV directly from source. Maybe this tutorial will help:

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

Matthias
  • 9,817
  • 14
  • 66
  • 125
-1

I don't know why, but installation of matplotlib solved for me the problem with the error

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

I emphasize that I prepared fresh conda environment where matplotlib was installed. Opencv was installed by pip in conda env as follow pip install opencv-python opencv-contrib-python.

  • You should install either `opencv-python` or `opencv-contrib-python`, not both, as per the official documentation of the second package. – amit kumar Jul 04 '19 at 09:15
-1

I followed the solution suggested by @Varun and it worked for me (using Python 3). However, I didn't install the built files, as I do not have the admin rights on the system where I need the cv package. A cmake, followed by make was enough, I then took the cv2.*.gnu file from ../build/lib/python3 folder and replaced the one in the site-packages/cv2 folder of my virtual environment

K. H.
  • 27
  • 3
-1

I had the same problem. Using opencv imshow function raised the moving thread error. Eventually, I found that Ubuntu 16.04 has a preinstalled pyqt5 while OpenCV needs pqty4. Therefore, this may be caused by conflicting installations of Qt libraries. The following command fixed it for me:

sudo apt-get remove libqt5x11extras5 libqt5x11extras5-dev
-1

I know the thread is a bit old but posting for anyone else out there, I faced the same problem and it was because even after running

pip3 uninstall opencv-python

there was another version of open-cv in my system which I checked by

pip list

(I'm guessing that pip only removes the first version it finds) So I ran this command again

pip3 uninstall opencv-python

And now simply installing opencv by

pip install opencv-python

worked for me.

thedumbkid
  • 125
  • 5
-1

In case you are using matplotlib, see this answer: https://stackoverflow.com/a/49887744/13268880

TL;DR: matplotlib.use('Agg')

  • While this link may answer the question, it is better to include the essential parts of the answer here and provide the link for reference. Link-only answers can become invalid if the linked page changes. - [From Review](/review/late-answers/32346921) – Giorgos Myrianthous Aug 01 '22 at 15:02
-2

This may be caused by conflicting installations of Qt libraries. The following command fixed it for me:

sudo apt-get remove libqt5x11extras5 libqt5x11extras5-dev

Mike Gashler
  • 609
  • 7
  • 12