Как исправить ошибку "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 и повторите попытку!
Ответ 4
Я исправил это в Ubuntu 18.04 LTS, удалив все пакеты OpenCV из pip
и apt
и установив OpenCV прямо из исходного кода. Может быть, этот урок поможет:
https://www.pyimagesearch.com/2018/08/15/how-to-install-opencv-4-on-ubuntu/
Ответ 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