webentwicklung-frage-antwort-db.com.de

Wie behebt man den Fehler "QObject :: moveToThread:" in opencv in Python?

Ich benutze opencv2 in Python mit dem Code

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

Ich habe den Fehler als 

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

Ich debuggen und stellte fest, dass es passiert, wenn ich cv2.waitKey(0) verwende. Wie soll ich das beheben? Vielen Dank

Update: Ich verwende 3.3.0.0. Wenn ich eine ältere Version verwende, habe ich einen Fehler

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

7
John

Deinstallieren Sie zunächst alle installierten Versionen von OpenCV. Wenn Sie mit pip installiert haben:

Sudo pip uninstall opencv-python

Versuchen Sie anschließend, OpenCV mit dem Paketmanager Ihrer Linux-Distribution zu installieren. Für Ubuntu/Debian ist dies:

Sudo apt-get install libopencv-dev python-opencv
4
Mateen Ulhaq

Ich habe dieses Problem gelöst und meine Lösung veröffentlicht in einem verwandten Problem auf der OpenCV-Github-Seite . Aber für Ihre Bequemlichkeit werde ich es auch hier posten.

In meinem Fall habe ich fast alle Lösungen durchgeführt:

  • installation mit Pip3 Installieren Sie OpenCV-Python
  • installation mit Apt Installieren Sie Python-OpenCV
  • Ich folgte @ areche Lösung , ich endete mit kdelibs5-plugins war ein wichtiges Modul für die meisten meiner Desktop-Umgebungen, daher verzichte ich auf die Deinstallation.

Schließlich fand ich eine Lösung für meinen Fall

  • pip uninstall opencv-python auf allen Instanzen meiner python und virtuellen Umgebungen
  • pip3 uninstall opencv-python auf allen Instanzen meiner python und virtuellen Umgebungen
  • Sudo apt remove python-opencv

dann habe ich das neueste opencv heruntergeladen, in meinem fall opencv-4.1.1, Ich baue es. zum Bauen :

mkdir build; cd build; ccmake .. dann habe ich c gedrückt, noch einmal c gedrückt, dann g gedrückt, um Dateien zu erzeugen, dann Sudo make -j8 Nach erfolgreicher Erstellung habe ich build\lib\python3\cv2.cpython.xxxxxx.so bis usr/local/lib/python3.5/dist-packages/ und umbenannt in cv2.so Mach dasselbe für jede virtuelle Umgebung, die du hast. (Ich bin nicht sicher, ob es logisch ist, aber es hat bei mir funktioniert).

dann hat alles ohne fehler geklappt.

2

Ich konnte dieses Problem beheben, indem ich neues pyqt installierte.

wenn Sie Anaconda verwenden, schreiben Sie einfach unten:

$ conda install pyqt

1
Charles Choi

Ich habe dies unter Ubuntu 18.04 LTS behoben, indem ich alle OpenCV-Pakete von pip und apt deinstallierte und OpenCV direkt von der Quelle installierte. Vielleicht hilft dieses Tutorial:

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

0
Matthias

Ich habe die oben genannte Methode ausprobiert und konnte das opencv-Modul für mein Projekt verwenden, das den Interpreter python3.x verwendet.

Nachdem ich einige Experimente durchgeführt habe, habe ich es mit den folgenden Schritten zum Laufen gebracht:

1) Installieren Sie opencv-python auf Ihrem Rechner mit: 

Sudo pip3 install opencv-python

2) Finden Sie auf dem python3.x-Terminal die Version:

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

3) Holen Sie sich dieselbe Version von OpenCV von ihrer offiziellen Seite

4) Nehmen Sie die CMake-Einstellungen wie in opencv Tutorial beschrieben vor. Notieren Sie sich den in PYTHON3_PACKAGES_PATH angegebenen Ort.

5) Sobald der Build durchgeführt wurde, gelangen Sie zu dem in PYTHON3_PACKAGES_PATH angegebenen Installationsort. Verschieben Sie die Bibliothek mit dem Namen cv2.cpython - * - gnu.so in den aktuellen dist-packages-Pfad von python3.x: 

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

6) Laden Sie Ihr python3-Projekt neu und versuchen Sie es erneut!

0

Dieses Problem tritt nicht auf, wenn opencv ohne virtuelle Umgebung ausgeführt wird. Mein System: Kbuntu 18.04 LTS GTX 1050 CUDA 9.2 Tensorflow 1.9

0
Przemek

Die Antwort von @Mateen funktioniert hervorragend, wenn Sie Ubuntu Version 17 und höher verwenden. Für Ubuntu 16 ist es besser, Ihren opencv-Python aus Quellen zu kompilieren. Wie bei @Varun erwähnt, folgen Sie dem opencv-Tutorial . Um opencv jedoch erfolgreich mit Python 3 zu kompilieren, muss ich im cmake-Befehl einige Flags hinzufügen:

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

Hoffe das wird hilfreich sein.

0
ptphucbk

Der openCv-Autor sagt, dass dieses Problem von verschiedenen Qt-Versionen in openCv und der Linux-Distribution herrührt. Das heißt: openCv wird mit Qt4 ausgeliefert, Qt5 ist jedoch bereits installiert.

0
user1261273

Ich habe die von @Varun vorgeschlagene Lösung befolgt und sie hat bei mir funktioniert (mit Python 3). Allerdings habe ich die erstellten Dateien nicht installiert, da ich keine Administratorrechte auf dem System habe wo ich das cv-paket brauche. ein cmake gefolgt von make hat gereicht, ich habe dann den cv2.*.gnu Datei von ../build/lib/python3 Ordner und ersetzte den im site-packages/cv2 Ordner meiner virtuellen Umgebung

0
Kinan Halloum

Ich weiß nicht warum, aber die Installation von matplotlib hat für mich das Problem mit dem Fehler gelöst

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

Ich betone, dass ich eine frische Conda-Umgebung vorbereitet habe, in der Matplotlib installiert wurde. Opencv wurde von pip in conda env wie folgt installiert pip install opencv-python opencv-contrib-python.

0
intheblack