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
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
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:
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 Umgebungenpip3 uninstall opencv-python
auf allen Instanzen meiner python und virtuellen UmgebungenSudo 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.
Ich konnte dieses Problem beheben, indem ich neues pyqt installierte.
wenn Sie Anaconda verwenden, schreiben Sie einfach unten:
$ conda install pyqt
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/
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!
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
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.
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.
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
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
.