Как исправить ошибку "QObject :: moveToThread:" в opencv в python?

Я использую opencv2 в python с кодом

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

Ответ 1

Во-первых, удалите все версии OpenCV, которые вы, возможно, установили. Если вы установили с помощью pip:

sudo pip uninstall opencv-python

Затем попробуйте установить OpenCV, используя диспетчер пакетов дистрибутива Linux. Для Ubuntu/Debian это:

sudo apt-get install libopencv-dev python-opencv

Ответ 2

Я решил эту проблему и разместил свое решение в соответствующей проблеме на странице gitub OpenCV. Но для вашего удобства я также опубликую это здесь.

В моем случае я сделал почти все решения:

  • установка с использованием pip3 установить opencv-python
  • установка с помощью apt install python-opencv
  • Я следовал решению @areche, и в итоге получил kdelibs5-plugins, который был важным модулем для большинства моих настольных сред, поэтому я отказался от его удаления.

Наконец-то я нашел решение для своего дела

  • pip uninstall opencv-python на всех экземплярах моего питона и виртуальных сред
  • pip3 uninstall opencv-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, который у вас есть. (Я не уверен, что это логично, но у меня это сработало).

тогда все работало нормально без ошибок.

Ответ 3

Я попробовал вышеупомянутый метод и мог получить opencv модуль, работающий для моего проекта, который использует интерпретатор python3.x.

Проведя несколько экспериментов, я получил его, выполнив следующие шаги:

1) Установите opencv-python на вашем компьютере, используя:

sudo pip3 install opencv-python

2) На терминале python3.x найдите версию:

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

3) Получите ту же версию OpenCV со своей официальной страницы.

4) Выполните настройки CMake, как указано в opencv tutorial. Обратите внимание на местоположение, указанное в PYTHON3_PACKAGES_PATH

5) После того, как была выполнена сборка, вы попали в место установки, указанное в PYTHON3_PACKAGES_PATH. Переместите библиотеку cv2. cpython- * -gnu. К текущему пути python3.x dist-packages:

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

6) Перезагрузите проект python3 и повторите попытку!

Ответ 5

Я смог решить эту проблему, установив новый pyqt.

если вы используете анаконду, просто запишите ниже:

$ conda install pyqt

Ответ 6

Эта проблема не возникает при запуске opencv без виртуального подключения. Моя система: Kbuntu 18.04 LTS GTX 1050 CUDA 9.2 Tensorflow 1.9

Ответ 7

Ответ @Mateen отлично работает, если у вас Ubuntu версии 17 и выше. Для Ubuntu 16 лучше скомпилировать из источников ваш opencv python. Как сказал @Varun, следуйте инструкциям opencv. Однако, чтобы успешно скомпилировать opencv с python 3, я должен добавить несколько флагов в команду 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/..

Надеюсь, что это будет полезно.

Ответ 8

Не знаю почему, но установка matplotlib решила для меня проблему с ошибкой

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

Подчеркиваю, что подготовил свежую среду conda, в которой был установлен matplotlib. OpenCV был установлен pip в conda env, как показано ниже: pip install opencv-python opencv-contrib-python.

Ответ 9

Автор openCv говорит, что эта проблема возникает из-за разных версий Qt в openCv и дистрибутиве linux. То есть: openCv поставляется с Qt4, но Qt5 уже установлен.

Ответ 10

Я следовал решению, предложенному @Varun, и оно работало для меня (используя Python 3). Однако я не установил встроенные файлы, так как у меня нет прав администратора в системе, где мне нужен пакет cv. cmake последующим make было достаточно, я взял cv2.*.gnu ../build/lib/python3 из папки ../build/lib/python3 и заменил его в папке site-packages/cv2 моей виртуальной среды.

Ответ 11

Это может быть вызвано конфликтующими установками библиотек Qt. Следующая команда исправила это для меня:

sudo apt-get удалить libqt5x11extras5 libqt5x11extras5-dev