Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

opencv GUI does not work #46

Closed
braindevices opened this issue Sep 12, 2017 · 91 comments
Closed

opencv GUI does not work #46

braindevices opened this issue Sep 12, 2017 · 91 comments
Labels

Comments

@braindevices
Copy link

cv2.namedWindow('test', cv2.WINDOW_AUTOSIZE) results in an error:

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

here is the version:

cv2.__version__
Out[3]: '3.3.0'
QtCore.QT_VERSION_STR
Out[7]: '5.6.2'
@skvark
Copy link
Member

skvark commented Sep 12, 2017

On which operating system? This is probably a bug in OpenCV or in your code and there's nothing I can do about it.

And no need to report Qt version, wheels have Qt 4.8.7 embedded inside them. They do not use your system's Qt version.

Are you sure you are using the prebuilt wheels?

@braindevices
Copy link
Author

yepp, using prebuilt wheels. It is on ubuntu 14.04

@skvark
Copy link
Member

skvark commented Sep 12, 2017

Works fine on Ubuntu 14.04:

screenshot from 2017-09-12 17_02_04

Can you post more code?

@TechnoConserve
Copy link

I get the same error when attempting cv2.namedWindow('test', cv2.WINDOW_AUTOSIZE), but only when using python3.5

I'm on Ubuntu 16.04.

@techdragon
Copy link
Contributor

@braindevices @TechnoConserve can you provide more information about your Ubuntu environment, the output of which -a python3, which -a pip, pip freeze, env (Always remember to check for any secret information that shouldn't be shared such as API keys or other items before you post the output of env) , and apt list --installed would all prove useful.

@TechnoConserve
Copy link

uname -a
Linux ave-GL552VW 4.10.0-35-generic #39~16.04.1-Ubuntu SMP Wed Sep 13 09:02:42 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux
which -a python3
/home/ave/venv/opencv/bin/python3
/home/ave/venv/potato/bin/python3
/usr/bin/python3
which -a pip
/home/ave/venv/potato/bin/pip
/home/ave/.local/bin/pip
/usr/local/bin/pip
/usr/bin/pip

That does seem puzzling to me since it only picked up pip in one of my virtual environments regardless of whether I have the opencv virtual environment active or not.

pip freeze
apparmor==2.10.95
apparmor.click==0.3.13.1
apt-xapian-index==0.47
apturl==0.5.2
awscli==1.11.155
beautifulsoup4==4.6.0
blinker==1.3
botocore==1.7.13
Brlapi==0.6.4
certifi==2017.7.27.1
chardet==3.0.4
checkbox-support==0.22
click==0.4.43+16.4.20170613.0ubuntu1
colorama==0.3.7
command-not-found==0.3
cryptography==1.2.3
defer==1.0.6
Django==1.11.5
django-modelcluster==3.1
django-taggit==0.22.1
django-treebeard==4.1.2
djangorestframework==3.6.4
docutils==0.14
feedparser==5.1.3
guacamole==0.9.2
html5lib==0.999
httplib2==0.9.1
idna==2.6
Jinja2==2.8
jmespath==0.9.3
language-selector==0.1
LibAppArmor==2.10.95
louis==2.6.4
lxml==3.5.0
Mako==1.0.3
MarkupSafe==0.23
numpy==1.13.1
oauthlib==1.0.3
onboard==1.2.0
opencv-python==3.3.0.10
padme==1.1.1
pexpect==4.0.1
Pillow==3.1.2
pkg-resources==0.0.0
plainbox==0.25
psycopg2==2.7.3.1
ptyprocess==0.5
pyasn1==0.3.5
pycups==1.9.73
pycurl==7.43.0
pygobject==3.20.0
PyJWT==1.3.0
pyparsing==2.0.3
python-apt==1.1.0b1
python-dateutil==2.6.1
python-debian==0.1.27
python-gnupg==0.3.8
python-systemd==231
pytz==2017.2
pyxdg==0.25
PyYAML==3.12
reportlab==3.3.0
requests==2.18.4
rsa==3.4.2
s3transfer==0.1.11
sessioninstaller==0.0.0
six==1.11.0
system-image==3.1
system-service==0.3
ubuntu-drivers-common==0.0.0
ufw==0.35
unattended-upgrades==0.1
Unidecode==0.4.21
unity-scope-calculator==0.1
unity-scope-chromiumbookmarks==0.1
unity-scope-colourlovers==0.1
unity-scope-devhelp==0.1
unity-scope-firefoxbookmarks==0.1
unity-scope-manpages==0.1
unity-scope-openclipart==0.1
unity-scope-texdoc==0.1
unity-scope-tomboy==0.1
unity-scope-virtualbox==0.1
unity-scope-yelp==0.1
unity-scope-zotero==0.1
urllib3==1.22
usb-creator==0.3.0
uWSGI==2.0.15
wagtail==1.12.2
Willow==0.4
xdiagnose==3.8.4.1
xkit==0.0.0
XlsxWriter==0.7.3
env
XDG_VTNR=7
KDE_MULTIHEAD=false
SSH_AGENT_PID=2482
XDG_SESSION_ID=2
PAM_KWALLET5_LOGIN=/tmp/kwallet5_ave.socket
TERM=xterm
SHELL=/bin/bash
KONSOLE_DBUS_SERVICE=:1.31
GTK2_RC_FILES=/etc/gtk-2.0/gtkrc:/home/ave/.gtkrc-2.0:/home/ave/.config/gtkrc-2.0
KONSOLE_PROFILE_NAME=Green
QT_LINUX_ACCESSIBILITY_ALWAYS_ON=1
GS_LIB=/home/ave/.fonts
GTK_RC_FILES=/etc/gtk/gtkrc:/home/ave/.gtkrc:/home/ave/.config/gtkrc
WINDOWID=58720261
OLDPWD=/home/ave/PycharmProjects/potato-project/potato
SHELL_SESSION_ID=b8195832c1774000aa88ccc122cc6b7b
GTK_MODULES=gail:atk-bridge
XDG_SESSION_CLASS=user
KDE_FULL_SESSION=true
USER=ave
QT_ACCESSIBILITY=1
LS_COLORS=rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:mi=00:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arc=01;31:*.arj=01;31:*.taz=01;31:*.lha=01;31:*.lz4=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.tzo=01;31:*.t7z=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.dz=01;31:*.gz=01;31:*.lrz=01;31:*.lz=01;31:*.lzo=01;31:*.xz=01;31:*.bz2=01;31:*.bz=01;31:*.tbz=01;31:*.tbz2=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.war=01;31:*.ear=01;31:*.sar=01;31:*.rar=01;31:*.alz=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.cab=01;31:*.jpg=01;35:*.jpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.webm=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=00;36:*.au=00;36:*.flac=00;36:*.m4a=00;36:*.mid=00;36:*.midi=00;36:*.mka=00;36:*.mp3=00;36:*.mpc=00;36:*.ogg=00;36:*.ra=00;36:*.wav=00;36:*.oga=00;36:*.opus=00;36:*.spx=00;36:*.xspf=00;36:
XDG_SESSION_PATH=/org/freedesktop/DisplayManager/Session1
XDG_SEAT_PATH=/org/freedesktop/DisplayManager/Seat0
SSH_AUTH_SOCK=/tmp/ssh-YXVwNQB4fLBl/agent.2436
SESSION_MANAGER=local/ave-GL552VW:@/tmp/.ICE-unix/2732,unix/ave-GL552VW:/tmp/.ICE-unix/2732
DEFAULTS_PATH=/usr/share/gconf//usr/share/xsessions/plasma.default.path
VIRTUAL_ENV=/home/ave/venv/opencv
XDG_CONFIG_DIRS=/etc/xdg/xdg-/usr/share/xsessions/plasma:/etc/xdg:/usr/share/kubuntu-default-settings/kf5-settings
DESKTOP_SESSION=/usr/share/xsessions/plasma
PATH=/home/ave/venv/opencv/bin:/home/ave/venv/potato/bin:/home/ave/bin:/home/ave/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
QT_IM_MODULE=compose
QT_QPA_PLATFORMTHEME=kde
PWD=/home/ave/venv
XDG_SESSION_TYPE=x11
LANG=en_US.UTF-8
KDE_SESSION_UID=1000
MANDATORY_PATH=/usr/share/gconf//usr/share/xsessions/plasma.mandatory.path
PS1=(opencv) \[\e]0;\u@\h: \w\a\]${debian_chroot:+($debian_chroot)}\u@\h:\w\$ 
KONSOLE_DBUS_SESSION=/Sessions/1
GTK2_MODULES=overlay-scrollbar
COLORFGBG=15;0
HOME=/home/ave
SHLVL=2
XDG_SEAT=seat0
KDE_SESSION_VERSION=5
LANGUAGE=
XCURSOR_THEME=breeze_cursors
LOGNAME=ave
XDG_SESSION_DESKTOP=KDE
DBUS_SESSION_BUS_ADDRESS=unix:abstract=/tmp/dbus-UiuOcMuIpB,guid=2d3de9776ef25a2171e6481959c98ad4
XDG_DATA_DIRS=/usr/share//usr/share/xsessions/plasma:/usr/local/share/:/usr/share/:/var/lib/snapd/desktop
LESSOPEN=| /usr/bin/lesspipe %s
XDG_RUNTIME_DIR=/run/user/1000
DISPLAY=:0
PROFILEHOME=
XDG_CURRENT_DESKTOP=KDE
PAM_KWALLET_LOGIN=/tmp/kwallet_ave.socket
LESSCLOSE=/usr/bin/lesspipe %s %s
ZADDR=zcbZsZdkHfGqbgUjZuM7KiJ7x2ayXLLbXfB8eryRqatW64hhqRK7W74Whjq95jFHKzyTYbnTFnNZBRM8cJ9Q6hVcGGWd7BT
XAUTHORITY=/tmp/xauth-1000-_0
_=/usr/bin/env

@dzimmerer
Copy link

Same error (also on 16.04 with python 3.5)

@djokjulapfe
Copy link

Same error on Ubuntu 16.04 with python 3.5. Beaks at cv2.imshow('Test', img)

@sibojia
Copy link

sibojia commented Nov 15, 2017

Same error on Ubuntu 16.04 with python 2.7. Prints hundreds of error:


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

When calling cv2.waitKey() for the first time in a process. No other effects but the messages are very annoying.
cv2.__version__ = 3.3.0

@ridho9
Copy link

ridho9 commented Nov 19, 2017

Same here, opencv 3.3.0 and ubuntu 16.04
Trying cv2.namedWindow('test', cv2.WINDOW_AUTOSIZE) with 3.3.0.10 returns the same QObject error, but using 3.2.0.8 returns

<ipython-input-3-2efaecccc8a8> in <module>()
----> 1 cv2.namedWindow('test', cv2.WINDOW_AUTOSIZE)

error: /io/opencv/modules/highgui/src/window.cpp:565: 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 cvNamedWindow

And I already have installed libgtk2.0-dev and pkg-config

@ibrmora
Copy link

ibrmora commented Dec 11, 2017

Same here, opencv 3.3.0.10 and ubuntu 16.04 with python 3.5.2 cv2.imshow("image", image)

@saeedranjbar12
Copy link

GUI problem with opencv 3.4.0 and ubuntu 16.04 - python 2.7

@caixiaofan
Copy link

First, 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-get install libopencv-dev python-opencv

copy from https://reformatcode.com/code/python/how-to-fix-the-error-quotqobjectmovetothreadquot-in-opencv-in-python

@sibojia
Copy link

sibojia commented Jan 19, 2018

@caixiaofan This simply lets you use the opencv binding shipped in apt-get and stop using this repo. IMHO issues in this repo should focus on how to solve problems in this library.

@mludvig
Copy link

mludvig commented Jan 21, 2018

I guess the problem is that Ubuntu 16.04 opencv libraries are 2.4.9.1 and that doesn't work with opencv-python 3.x. I've got the same problem here - the apt-installed opencv-python 2.4.9.1 works fine but pip-installed opencv-python 3.4.0 fails with the very same program (simple imread()/imshow()) with:

QObject::moveToThread: Current thread (0x1d7c6c0) is not the object's thread (0x228e340).
Cannot move to target thread (0x1d7c6c0)
Segmentation fault

Unfortunately opencv-python 2.4.9 doesn't support Python3 as far as I know so I'm stuck with Python2 for now.

@skvark
Copy link
Member

skvark commented Jan 21, 2018

I'm sorry but I'm still unable to replicate this issue. I took a fresh Ubuntu 16.04.3 Virtualbox image and run multiple different tests and even tried to deliberately break the installation. No errors.

Test script which I used:

import cv2
import numpy as np

print("first window 1")

cv2.namedWindow('test', cv2.WINDOW_AUTOSIZE)
black = np.zeros((400, 400, 3), np.uint8)
cv2.imshow('test')
cv2.waitKey(0)

print("second window 2")

cv2.imshow('test', black)
cv2.waitKey(0)

print("third window 3")

cv2.imshow('test', black)
cv2.waitKey(0)

cv2.destroyAllWindows()

Dynamic linking is OK. The static library which ships with these wheels should look like below when inspected through readelf and ldd. RPATH entry should point to the .libs/ folder which should contain these files:

osboxes@osboxes:~/.local/lib/python3.5/site-packages/cv2/.libs$ ls
libavcodec-7625dabe.so.58.6.103   libQtCore-ba1dc80c.so.4.8.7  libswresample-81cb7b3e.so.3.0.101
libavformat-d3ca1b40.so.58.3.100  libQtGui-6d0f14dd.so.4.8.7   libswscale-bc8d848b.so.5.0.101
libavutil-eaec640f.so.56.5.100    libQtTest-1183da5d.so.4.8.7  libz-a147dcb0.so.1.2.3

Readelf:

osboxes@osboxes:~/Desktop$ readelf -d /home/osboxes/.local/lib/python3.5/site-packages/cv2/cv2.cpython-35m-x86_64-linux-gnu.so

Dynamic section at offset 0x15ea1c8 contains 40 entries:
  Tag        Type                         Name/Value
 0x0000000000000001 (NEEDED)             Shared library: [libz-a147dcb0.so.1.2.3]
 0x0000000000000001 (NEEDED)             Shared library: [libavcodec-7625dabe.so.58.6.103]
 0x0000000000000001 (NEEDED)             Shared library: [libavformat-d3ca1b40.so.58.3.100]
 0x0000000000000001 (NEEDED)             Shared library: [libavutil-eaec640f.so.56.5.100]
 0x0000000000000001 (NEEDED)             Shared library: [libswscale-bc8d848b.so.5.0.101]
 0x0000000000000001 (NEEDED)             Shared library: [libQtGui-6d0f14dd.so.4.8.7]
 0x0000000000000001 (NEEDED)             Shared library: [libQtTest-1183da5d.so.4.8.7]
 0x0000000000000001 (NEEDED)             Shared library: [libQtCore-ba1dc80c.so.4.8.7]
 0x0000000000000001 (NEEDED)             Shared library: [libdl.so.2]
 0x0000000000000001 (NEEDED)             Shared library: [libpthread.so.0]
 0x0000000000000001 (NEEDED)             Shared library: [librt.so.1]
 0x0000000000000001 (NEEDED)             Shared library: [libstdc++.so.6]
 0x0000000000000001 (NEEDED)             Shared library: [libm.so.6]
 0x0000000000000001 (NEEDED)             Shared library: [libgcc_s.so.1]
 0x0000000000000001 (NEEDED)             Shared library: [libc.so.6]
 0x0000000000000001 (NEEDED)             Shared library: [ld-linux-x86-64.so.2]
 0x000000000000000f (RPATH)              Library rpath: [$ORIGIN/.libs]

ldd:

osboxes@osboxes:~/Desktop$ ldd /home/osboxes/.local/lib/python3.5/site-packages/cv2/cv2.cpython-35m-x86_64-linux-gnu.so	
        linux-vdso.so.1 =>  (0x00007ffc0c7e1000)
	libz-a147dcb0.so.1.2.3 => /home/osboxes/.local/lib/python3.5/site-packages/cv2/.libs/libz-a147dcb0.so.1.2.3 (0x00007f77571f0000)
	libavcodec-7625dabe.so.58.6.103 => /home/osboxes/.local/lib/python3.5/site-packages/cv2/.libs/libavcodec-7625dabe.so.58.6.103 (0x00007f7755a6b000)
	libavformat-d3ca1b40.so.58.3.100 => /home/osboxes/.local/lib/python3.5/site-packages/cv2/.libs/libavformat-d3ca1b40.so.58.3.100 (0x00007f775562a000)
	libavutil-eaec640f.so.56.5.100 => /home/osboxes/.local/lib/python3.5/site-packages/cv2/.libs/libavutil-eaec640f.so.56.5.100 (0x00007f77553b5000)
	libswscale-bc8d848b.so.5.0.101 => /home/osboxes/.local/lib/python3.5/site-packages/cv2/.libs/libswscale-bc8d848b.so.5.0.101 (0x00007f775512b000)
	libQtGui-6d0f14dd.so.4.8.7 => /home/osboxes/.local/lib/python3.5/site-packages/cv2/.libs/libQtGui-6d0f14dd.so.4.8.7 (0x00007f775429a000)
	libQtTest-1183da5d.so.4.8.7 => /home/osboxes/.local/lib/python3.5/site-packages/cv2/.libs/libQtTest-1183da5d.so.4.8.7 (0x00007f775406d000)
	libQtCore-ba1dc80c.so.4.8.7 => /home/osboxes/.local/lib/python3.5/site-packages/cv2/.libs/libQtCore-ba1dc80c.so.4.8.7 (0x00007f7753b60000)
	libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f7753942000)
	libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f7753725000)
	librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007f775351c000)
	libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007f775319a000)
	libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f7752e91000)
	libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f7752c7a000)
	libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f77528b0000)
	/lib64/ld-linux-x86-64.so.2 (0x0000564f070bb000)
	libswresample-81cb7b3e.so.3.0.101 => /home/osboxes/.local/lib/python3.5/site-packages/cv2/.libs/libswresample-81cb7b3e.so.3.0.101 (0x00007f7752692000)
	libgthread-2.0.so.0 => /usr/lib/x86_64-linux-gnu/libgthread-2.0.so.0 (0x00007f775248f000)
	libglib-2.0.so.0 => /lib/x86_64-linux-gnu/libglib-2.0.so.0 (0x00007f775217e000)
	libSM.so.6 => /usr/lib/x86_64-linux-gnu/libSM.so.6 (0x00007f7751f75000)
	libICE.so.6 => /usr/lib/x86_64-linux-gnu/libICE.so.6 (0x00007f7751d5b000)
	libXrender.so.1 => /usr/lib/x86_64-linux-gnu/libXrender.so.1 (0x00007f7751b51000)
	libXext.so.6 => /usr/lib/x86_64-linux-gnu/libXext.so.6 (0x00007f775193e000)
	libX11.so.6 => /usr/lib/x86_64-linux-gnu/libX11.so.6 (0x00007f7751604000)
	libpcre.so.3 => /lib/x86_64-linux-gnu/libpcre.so.3 (0x00007f7751393000)
	libuuid.so.1 => /lib/x86_64-linux-gnu/libuuid.so.1 (0x00007f775118e000)
	libxcb.so.1 => /usr/lib/x86_64-linux-gnu/libxcb.so.1 (0x00007f7750f6c000)
	libXau.so.6 => /usr/lib/x86_64-linux-gnu/libXau.so.6 (0x00007f7750d67000)
	libXdmcp.so.6 => /usr/lib/x86_64-linux-gnu/libXdmcp.so.6 (0x00007f7750b61000)

I did also sudo apt-get install libopencv-dev python-opencv and installed pip install opencv-python next to it (do not do this) but nothing broke.

To be able to fix this or to provide some solution, I still need more information. This means that every thing related to these is important:

  • FULL EXAMPLE of the script which produces this error, one line is not simply enough
  • exact steps which were used to install opencv-python
  • possible other conflicting OpenCV installations
  • anything related to Qt
  • are you using virtual environment or not
  • has the Ubuntu envinroment been modified somehow

Please note that opencv-python versions < 3.3.0.10 do not support GUI functionality and thus support for it cannot be enabled in them without a full rebuild which is impossible because the packages are pre-built. So if you see this error, you are using too old package:

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

Releases page contains changelogs for this package: https://github.com/skvark/opencv-python/releases

@martingra
Copy link

Hi. Having the same problem!

  • OS: Ubuntu 16.04 LTS
  • Trying to run the script posted by @skvark:
    `import cv2
    import numpy as np

print("first window 1")

cv2.namedWindow('test', cv2.WINDOW_AUTOSIZE)
black = np.zeros((400, 400, 3), np.uint8)
cv2.imshow('test')
cv2.waitKey(0)

print("second window 2")

cv2.imshow('test', black)
cv2.waitKey(0)

print("third window 3")

cv2.imshow('test', black)
cv2.waitKey(0)

cv2.destroyAllWindows()`

  • To install OpenCv, I am using a Virtual Environment using Python 3.5. After activating this environment, and using pip install, I installed opencv-python using pip install opencv-python.

  • Related with PyQT4, I installed it using sudo-apt get install and downloading source and runing make install inside the environment, but for some reason, I'm not finding this packaged listed in the File->Settings-> Project Interpreter section of my PyCharm IDE. I dont know if this may be the problem

The error that is showing to me is:

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

when it gets to the execution of cv2.imshow('test')

Thank you for your help! I'm really stucked in here!

@ujsyehao
Copy link

@saeedranjbar12 I run into this problem too, So how to solve it?

@jckastel
Copy link

jckastel commented Mar 18, 2018

I have the same problem with opencv-python 3.4.0.12 (installed via pip) python 3.5.2, ubuntu 16.04.4 LTS, whenever I use cv2.namedWindow or cv2.imshow. No virtualenv, nothing fancy is needed:

Python 3.5.2 (default, Nov 23 2017, 16:37:01) 
[GCC 5.4.0 20160609] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import cv2
>>> cv2.namedWindow('test')
QObject::moveToThread: Current thread (0x1aee720) is not the object's thread (0x1fd1f30).
Cannot move to target thread (0x1aee720)

Segmentation fault (core dumped)

Same is true for opencv-contrib-python.

@skvark
Copy link
Member

skvark commented Mar 18, 2018

As I have written earlier, I can't replicate this behaviour with clean Ubuntu 16.04.4 image. Those two lines of code are not enough. I need more information about the environment because issue is most likely in some combination of other installed software (like PyQt) and opencv-python. OpenCV binaries which ship with these packages are built with the standard OpenCV toolchain and it's unlikely that there's something wrong with them. This seems to be very focused on Ubuntu and some rare cases under it which makes it very hard to replicate and debug the issue.

@dorinionescu
Copy link

dorinionescu commented Apr 2, 2018

Same error at all imshow calls
This could be from lacking swap space at large images (my swap is completely missing)
I have 5000 image here and it works if the image is less than 60K (and no sudo on command line) = this is a int to long conversion error in the swap space (I also found this error in the first Unix version of Kernigham and Ritchie - did you copy some code from there :-) ? )

It works well with smaller images (and stop working with sudo python3 .... works only with python3 ....)

cv2.imshow("Input", image)
cv2.imshow("Original", faceOrig)

My workaround is this
convert -strip -interlace Plane -gaussian-blur 0.05 -quality 85% DSC_0372.JPG DSC_0372_c85.JPG
until the image is under 64k

@WuXinyang2012

This comment has been minimized.

@RunningLeon
Copy link

Could anyone give a good answer? The same problem happened to me as well.
Thanks in advance.

@skvark
Copy link
Member

skvark commented May 22, 2018

There's no solution but I suspect that the issue has something to do with conflicts between multiple Qt's.

@RunningLeon
Copy link

@skvark Thanks for your quick response.
But it's really bothering me. I'm using anaconda3 and all my envs that have opencv-python have crashed.

@AwwwwHamburgers
Copy link

I didn't have this issue at first, then cv2.namedWindow just stopped working for me without me making any system changes. I noticed in dmesg the following:
python[29883]: segfault at 0 ip 00007fa8c3c114be sp 00007ffcf5c34740 error 4 in libxcb.so.1.1.0[7fa8c3c07000+21000]

After a quick Google, I found this thread, which recommended removing the libqt5x11extras5 package. I just removed that (and the 121 dependent packages), and it's working properly again. So like @skvark mentioned, it's probably due to Qt conflicts.

@FedericoPonzi
Copy link

FedericoPonzi commented May 31, 2018

@coxbrandon thank you very much! Same problem, that solution worked like a charm. Thanks a lot! (I also had that number of dependent packages - on Linux Mint).

@skvark
Copy link
Member

skvark commented May 31, 2018

If you have this issue: try to remove libqt5x11extras5 package (see @coxbrandon's message above) and please report here if that solution works for you. Note: do this at your own risk.

@Ekkehard
Copy link

Ekkehard commented Jun 1, 2018

I advise strongly against removing libqt5x11extras5 unless you know exactly what you are doing. It killed my lightdm display manager, and, sadly, didn't fix the issue for me.

@fdornelasx
Copy link

My problem was caused by QT. before I install QT, my opencv was fine.
I uninstalled QT but it did not help. I finally was able to make it work through "sudo apt-get autoremove libqt5x11extras5".

I did this and now I can't login on my Kubuntu.

Don't do this.

Now I am trying to fix and then I will post the solution...

@mfahad1
Copy link

mfahad1 commented Mar 10, 2020

@areche hats off to you debugging skills, it solved my problem in no time..

@harshasunder-1
Copy link

harshasunder-1 commented Apr 7, 2020

Areche debugging procedure above worked for me. In my case the problem library was kdelibs5-plugins which i think got installed with amarok, the music player. I guessed this was the problem library because i saw libQtCore being a part of this library in the output file.

Thanks areche!

@skvark
Copy link
Member

skvark commented Apr 7, 2020

Next opencv-python release will include Qt5 instead of Qt4. That change will most likely solve this issue.

@native-api
Copy link
Contributor

Next opencv-python release will include Qt5 instead of Qt4. That change will most likely solve this issue.

How? It's going to conflict with any other Qt5 installation present just the same.

@skvark
Copy link
Member

skvark commented Apr 7, 2020

Next opencv-python release will include Qt5 instead of Qt4. That change will most likely solve this issue.

How? It's going to conflict with any other Qt5 installation present just the same.

It's the same major version so I assume it should have better compatibility. But of course there might be still some conflicts.

Edit: by the same version I mean that most of the systems use Qt5 nowadays. Qt4 is very old and the issues might be related only to Qt4 versions.

@anik-kucse
Copy link

Thanks @NikkoWei. As I don't want to break my KDE DE I followed your instruction. test code runs perfectly.

It's risky to remove libqt5x11extras5 or kde-style-breeze-qt4 for environment which need the modules.
In my case, I work on Ubuntu with KDE. So libqt5x11extras5 or kde-style-breeze-qt4 are important for my desktop environment.

I found there are Qt conflicts between those in opencv-python package and those in system path. The steps to find the problem are the same as @areche:

  1. Display the library loading problems
    export LD_DEBUG=all
  1. Edit script to cause the problem
# fail.py
import cv2
im = cv2.imread('img.jpg')
cv2.imshow('image',im)
cv2.waitKey(0)
  1. Export the library loading information
    python fail.py 2>output.txt
  1. I found there are two version of Qt are used by loader in output.txt:
    ...

     10836:	symbol=_ZNSbIwSt11char_traitsIwESaIwEEC1ERKS2_;  lookup in file=/home/lnwei/.conda/envs/opencv_test/lib/python3.6/site-packages/cv2/.libs/libQtGui-903938cd.so.4.8.7 [0]
     10836:	symbol=_ZNSbIwSt11char_traitsIwESaIwEEC1ERKS2_;  lookup in file=/home/lnwei/.conda/envs/opencv_test/lib/python3.6/site-packages/cv2/.libs/libQtTest-1183da5d.so.4.8.7 [0]
     10836:	symbol=_ZNSbIwSt11char_traitsIwESaIwEEC1ERKS2_;  lookup in file=/home/lnwei/.conda/envs/opencv_test/lib/python3.6/site-packages/cv2/.libs/libQtCore-6df570dd.so.4.8.7 [0]

     ...

     10836:	symbol=_ZTI14QWindowSurface;  lookup in file=/usr/lib/x86_64-linux-gnu/libQtDBus.so.4 [0]
     10836:	symbol=_ZTI14QWindowSurface;  lookup in file=/usr/lib/x86_64-linux-gnu/libQtCore.so.4 [0]
     10836:	symbol=_ZTI14QWindowSurface;  lookup in file=/usr/lib/x86_64-linux-gnu/libQtGui.so.4 [0]

     ...

As you see, there are two version Qtlib are used: 4.8.7 in the python packages path(I use conda environment) and 4 in the system path.
So it's probably the Qt conflicts.

There are 2 ways to solve this problem:

  1. Rebuild opencv by source to link Qtlib in system path. After make -j8, move the python library of opencv to overwrite the library in your python packages environment

    cp /path/to/build/lib/python3/cv2.cpython-36m-x86_64-linux-gnu.so /home/lnwei/.conda/envs/opencv_test/lib/python3.6/site-packages/cv2/cv2.cpython-36m-x86_64-linux-gnu.so
  2. Just replace Qtlib in the python packages by Qtlib in system (according to output.txt)

    cp /usr/lib/x86_64-linux-gnu/libQtGui.so.4 ./libQtGui-903938cd.so.4.8.7
    
    cp /usr/lib/x86_64-linux-gnu/libQtCore.so.4 ./libQtCore-6df570dd.so.4.8.7 

    I can't find libQtTest in my system path but it make no difference.

The 2 solution are OK for my case.

@hedoluna
Copy link

I didn't have this issue at first, then cv2.namedWindow just stopped working for me without me making any system changes. I noticed in dmesg the following:
python[29883]: segfault at 0 ip 00007fa8c3c114be sp 00007ffcf5c34740 error 4 in libxcb.so.1.1.0[7fa8c3c07000+21000]

After a quick Google, I found this thread, which recommended removing the libqt5x11extras5 package. I just removed that (and the 121 dependent packages), and it's working properly again. So like @skvark mentioned, it's probably due to Qt conflicts.

you saved my day!

@native-api
Copy link
Contributor

Anyway, without knowing if linking statically is even possible and solves the problem, legal debates are over nothing.

FYI, it is possible to link to Qt statically, and we would have to either

  • provide opencv-python and OpenCV source code (and require anyone else who conveys it to do the same) -- i.e. relicense opencv-python as strong copyleft; or
  • provide object files for the closed-source parts that a user would be able to link (statically) with a modified (static) Qt, as well as instructions on how to do this, in some form.

For the 2nd option,

  • I believe the temporary cmake-build directory tree, without the resulting Python module, would qualify. In essence, we need the makefiles to pick up the object files without recompiling them and perform linking for whatever links to Qt and all the way up to the extension module as usual. Not sure if CMake-generated makefiles can do that, or they would complain and require OpenCV sources as well to check if the object files are up to date.
  • An archive of this tree for each release with static Qt would need to be available to opencv-python users somehow -- e.g. at Github releases page (for at least 3 years since release date).
  • LICENSE-3RD-PARTY.txt would need to refer to that location in its Qt section.
  • Anyone who conveys opencv-python would have the same obligation and would either have to rely on us, or (e.g. if they make modifications), provide such an archive themselves and update LICENSE-3RD-PARTY.txt accordingly.

I.e. this is not any easier at all than providing the source code in the first place.


So, I conclude that it would be much easier to update OpenCV to support namespaced Qt -- especially since supporting it is pretty straightforward -- and link against such a Qt.

  • In Linux, it's as trivial as adding a configuration switch to dockerfiles since we compile Qt ourselves
  • In OSX, will have to make a custom Qt formula and compile it from source just like for FFMpeg.

@freakabcd
Copy link

freakabcd commented Jul 26, 2020

I don't have segfaults or crashes; the window just shows up with no content (black bar?) when trying to imshow with the following code:

import cv2
img = cv2.imread('/tmp/foo.png')
cv2.imshow('output', img)
cv2.waitKey(0)

with the aforementioned moveToThread messages:

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

output

/tmp/foo.png is a colour image of size 512x512.

I am on a Manjaro system with python 3.8.3, opencv-python 4.3.0.36, KDE and Qt5 (although this should not matter as opencv-python ships with own version of Qt). Looking through the LD_DEBUG output, I can see the system Qt libs being loaded as a result of an indirect dependency from the opencv-python shipped Qt libs!

   1262759:     file=/usr/lib/qt4/plugins/imageformats/libqgif.so [0];  dynamically loaded by /home/freakabcd/.virtualenvs/opencv/lib/python3.8/site-packages/cv2/../opencv_python.libs/libQtCore-6b7bca35.so.4.8.7 [0]
   1262759:     file=/usr/lib/qt4/plugins/imageformats/libqgif.so [0];  generating link map
   1262759:       dynamic: 0x00007f38b9c68bf8  base: 0x00007f38b9c5f000   size: 0x000000000000a030
   1262759:         entry: 0x00007f38b9c62020  phdr: 0x00007f38b9c5f040  phnum:                  9
   1262759:     
   1262759:     
   1262759:     file=libQtGui.so.4 [0];  needed by /usr/lib/qt4/plugins/imageformats/libqgif.so [0]
   1262759:     find library=libQtGui.so.4 [0]; searching
   1262759:      search cache=/etc/ld.so.cache
   1262759:       trying file=/usr/lib/libQtGui.so.4
   1262759:     
   1262759:     file=libQtGui.so.4 [0];  generating link map
   1262759:       dynamic: 0x00007f38b9ba3540  base: 0x00007f38b909b000   size: 0x0000000000b202c0
   1262759:         entry: 0x00007f38b926c020  phdr: 0x00007f38b909b040  phnum:                  9
   1262759:     
   1262759:     
   1262759:     file=libQtCore.so.4 [0];  needed by /usr/lib/qt4/plugins/imageformats/libqgif.so [0]
   1262759:     find library=libQtCore.so.4 [0]; searching
   1262759:      search cache=/etc/ld.so.cache
   1262759:       trying file=/usr/lib/libQtCore.so.4
   1262759:     
   1262759:     file=libQtCore.so.4 [0];  generating link map
   1262759:       dynamic: 0x00007f38b9094920  base: 0x00007f38b8d98000   size: 0x0000000000302410
   1262759:         entry: 0x00007f38b8e30f60  phdr: 0x00007f38b8d98040  phnum:                 12

As you can see, the opencv-python provided libQtCore is dynamically loading this libqgif.so because it is present in some known path to it /usr/lib/qt4/plugins/imageformats. Given that @areche mentions /usr/lib/kde4/plugins/styles/breeze.so being loaded on their system, it could be that the 4.8.7 Qt shipped with opencv-python is not built correctly to ignore loading plugins from well known "system" paths. I am not even sure if such an option exists in the Qt build configuration as it has been many years since I have built Qt from source.

It would be great if some of the people on this thread with the same issue can check if they have the /usr/lib/qt4/plugins or /usr/lib/kde4/plugins paths showing up in their debug logs (LD_DEBUG=all python myfile.py). If other people can confirm one (or both) of these paths is appearing in their output, someone can check if there is a Qt build config to get rid of searching system paths for plugins to load dynamically.

@skvark
Copy link
Member

skvark commented Jul 28, 2020

@freakabcd See #362

The latest issue with Qt4 is related to the manylinux2014 upgrade. I had to use qt-devel directly from CentOS 7 repos because there were some compiler related issues when I tried to compile Qt4 manually. In older manylinux1 releases Qt4 was compiled manually. Please check the Dockerfiles in the docker folder in this repo for more info. I'll try to upgrade to Qt5 before next release which hopefully solves some of these issues. Plugins path can be set as an env var in Qt5 (like it is set currently in macOS builds in __init__.py), but not in Qt4 based on some fast searches I did earlier.

@skvark
Copy link
Member

skvark commented Aug 9, 2020

Starting from 3.4.10.37 and 4.3.0.38 the pre-built wheels will include Qt 5.15 which has been built in a namespace so the conflict issue should be fixed. The new releases should be up in the next 24 hours. However, please note that I cannot guarantee that the wheels will work on all GNU/Linux systems. The new releases will include also source distributions which should allow to build the wheels locally if you encounter issues with the OpenCV GUI functions.

@joelcma
Copy link

joelcma commented Sep 4, 2020

I would just like to add that I get this same error on 4.3.0.38 and forward but not on 4.3.0.36. I'm running Elementary OS 5.1.7 Hera (Ubuntu based).

I tried updating because cv2.imshow wasn't showing all of my images properly (some were just showing a small box instead of the image) and after updating they show as they should but I'm getting the same QObject::moveToThread error.

@skvark
Copy link
Member

skvark commented Sep 4, 2020

@joelcma Yeah, that "small box" bug was this one which was also caused by a Qt conflict: #362

Can't help much with that QObject::moveToThread error. Just make sure that your Python environment is consistent and you have removed all old versions of opencv-python from there. I have done everything I can to fix the issue.

@parluo
Copy link

parluo commented Nov 27, 2020

It seem that I soved QObject::moveToThread: Current thread is not the objects thread. Cannot move to target thread, byconda uninstall pyqt. But I don't make sure its feasibility. And I found the QT about libs in /usr/lib/x86_64-linux-gnu whill be removed after the commond and every thing is fine now.

@js899
Copy link

js899 commented Dec 2, 2020

My problem was caused by QT. before I install QT, my opencv was fine.
I uninstalled QT but it did not help. I finally was able to make it work through "sudo apt-get autoremove libqt5x11extras5".

It didn't work for me, I have to submit a project but nothing seems to be working. I have Ubuntu 20.04 LTS, working in Spyder but unable to take videocapture. Please help.

@GhostDog98
Copy link

Next opencv-python release will include Qt5 instead of Qt4. That change will most likely solve this issue.

What do we do if we are still having this issue? (version 4.6)

@Coderx7
Copy link

Coderx7 commented Sep 1, 2023

For those having this issue in Anaconda installation, just pip uninstall your opencv-python , and install opencv using conda :

conda install -c conda-forge opencv

that should fix your problems.

aywi added a commit to aywi/mprotonet that referenced this issue Nov 17, 2023
1. Force to use scikit-learn>=1.3 to avoid `DeprecationWarning` from NumPy.
2. Use opencv-contrib-python-headless to avoid conflicts with PyQt installed with conda (https://stackoverflow.com/q/46449850 opencv/opencv-python#46 (comment)).
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests