opencv / opencv-python

Automated CI toolchain to produce precompiled opencv-python, opencv-python-headless, opencv-contrib-python and opencv-contrib-python-headless packages.
https://pypi.org/project/opencv-python/
MIT License
4.54k stars 849 forks source link

opencv GUI does not work #46

Closed braindevices closed 4 years ago

braindevices commented 7 years ago

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 commented 7 years ago

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 commented 7 years ago

yepp, using prebuilt wheels. It is on ubuntu 14.04

skvark commented 7 years ago

Works fine on Ubuntu 14.04:

screenshot from 2017-09-12 17_02_04

Can you post more code?

TechnoConserve commented 7 years ago

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 commented 7 years ago

@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 commented 7 years ago
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 commented 7 years ago

Same error (also on 16.04 with python 3.5)

djokjulapfe commented 7 years ago

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

sibojia commented 6 years ago

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 commented 6 years ago

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 commented 6 years ago

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

saeedranjbar12 commented 6 years ago

GUI problem with opencv 3.4.0 and ubuntu 16.04 - python 2.7

caixiaofan commented 6 years ago

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 commented 6 years ago

@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 commented 6 years ago

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 commented 6 years ago

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:

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 commented 6 years ago

Hi. Having the same problem!

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()`

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 commented 6 years ago

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

jckastel commented 6 years ago

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 commented 6 years ago

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 commented 6 years ago

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 commented 6 years ago

same errors

RunningLeon commented 6 years ago

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

skvark commented 6 years ago

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

RunningLeon commented 6 years ago

@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 commented 6 years ago

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 commented 6 years ago

@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 commented 6 years ago

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 commented 6 years ago

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.

AwwwwHamburgers commented 6 years ago

@Ekkehard, that's why I mentioned there were a number of dependent packages, as sort of a warning that removing it might have undesired consequences. FWIW, I'm running Linux Mint 18 with Cinnamon (and mdm as the display manager), and it looked like the libqt5x11extras5 package was only installed as a result of some KDE thing I installed at one point and never touched again, so I wasn't too concerned with removing it.

Are you seeing the same libxcb.so.1.1.0 segfault error in dmesg I mentioned above whenever you get the QObject::moveToThread issue? Or any other corresponding error in dmesg?

Ekkehard commented 6 years ago

@coxbrandon, nope, I can see nothing conspicuous in dmsg at all (nor in any of the "usual suspects" other logs).

And you are right, KDE is getting hit hard by removing libqt5x11extras5, so whoever is using KDE (e.g. Kubuntu) is well advised not to remove it (Kdevelop and Kontact had to be re-installed, and a nonfunctional display manager leaves anybody dead in the water who depends on a GUI to do just about anything). That's why I wanted to re-emphasize your warning, in particular since it is hard to know which programs depend on any one of the 120-some-odd packages that get removed right along with that library.

But it could be a hint too, maybe there is some incompatibility with KDE, even if you have only some of its components installed.

skvark commented 6 years ago

After some googling with different keywords I found this: https://stackoverflow.com/a/42955557/5795428

It indeed seems that the Qt 4.8.7 which ships with opencv-python somehow conflicts with the system (or some other) Qt installation. I can try to rebuild the Docker images and Qt in them with -qtnamespace Qt flag which should prevent symbol clashes.

Buckler89 commented 6 years ago

Hello, I've also encountered this problem. Will you notify us here when you have done?

Thanks in advance

muziker commented 6 years ago

Right, so i compiled opencv3 and it installs for python2 as well as python3. It requires about 5G of space, and maybe some changing of the runpath for one of the sofiles. Other than that, once installed, the errors with cannot move to thread is resolved and works. You'll need to compile FFmpeg as well. I want to add that uninstalling libqt5x11extras5 package is probably not a good idea as a resolution to a problem like this. Also if one of the sofiles has a runpath that points somewhere where you don't want it, patchelf --force-rpath --set-rpath 'path to library dir' sofile.

linusg commented 6 years ago

@skvark an updated release would be great! Also have this issue, uninstalling the package mentioned above would break/uninstall VLC, Albert, CopyQ, Kdenlive and others. Really appreciate your efforts with this project!

skvark commented 6 years ago

I'll try to rebuild the Docker images during next weekend and publish a new release after that.

skvark commented 6 years ago

New Docker images are now up. I'll publish a new release during next week.

EDIT: Requires more work, the new Qt build is not linked properly...

skvark commented 6 years ago

I have to patch OpenCV (add Qt namespace macros to OpenCV Qt GUI code) to make this work.

esitharth commented 6 years ago

@skvark We are awaiting this patch :)

skvark commented 6 years ago

I'm afraid the changes were far more complicated than I anticipated. Currently I don't have time to finish patching the OpenCV sources to support namespaced Qt builds. Current priority is to get Python 3.7 support out.

What would be needed is support for namespaced Qt builds (https://wiki.qt.io/Qt_In_Namespace). The problem is that for some reason OpenCV builds and links fine with the namespaced Qt but when the library is imported the Qt symbols are not found. These files need fixes (the issue is in OpenCV, not in this repository):

https://github.com/opencv/opencv/blob/master/modules/highgui/src/window_QT.h https://github.com/opencv/opencv/blob/master/modules/highgui/src/window_QT.cpp

uhdzf commented 6 years ago

I removed libqt5x11extras5 but my display manager (kde plasma) broke. Seems like its no solution for me :(

andyvk85 commented 6 years ago

Unfortunately, I also suffer from this bug. I hope some smart person can fix it.

RunningLeon commented 6 years ago

Have met this problem twice. Changing qt5 to qt4 works for me.

ThomasWMarshall commented 6 years ago

I also have this issue. Any updates on potential fixes?

skvark commented 6 years ago

The status is the same as before: OpenCV does not support namespaced Qt builds -> this issue cannot be fixed: https://github.com/skvark/opencv-python/issues/46#issuecomment-404942996

Ekkehard commented 6 years ago

If that is so, does that mean that OpenMV-python will never work with KDE, which is Qt-everything and turned out to be at the root of my problems with OpenMV? If that is the case, this should probably be mentioned somewhere predominantly as it would save lots of people lots of headaches.

On Monday, September 24, 2018 9:15:29 AM PDT Olli-Pekka Heinisuo wrote:

The status is the same as before: OpenCV does not support namespaced Qt builds -> this issue cannot be fixed: https://github.com/skvark/opencv-python/issues/46#issuecomment-404942996

skvark commented 6 years ago

The precompiled opencv-python packages generated by this repository will not work properly in some GNU/Linux systems. Some solutions:

ThomasWMarshall commented 6 years ago

@skvark Just out of curiosity, I do have a KDE Neon install on which opencv works with gui support. It's using Qt 5.11.1. My other Neon install, which is a newer version, doesn't work. Do you know why it might work sometimes out of the box?

Additionally, might there be a way to run the guis with GTK instead of Qt?

skvark commented 6 years ago

Most likely older Qt versions work better together with the Qt 4.8.7 which is bundled in the opencv-python wheels. The only real fix for this is the namespaced Qt build but unfortunately it's impossible to use it since being compatible with it would require a rewrite of the OpenCV Qt GUI code.

I tried to initially enable GTK but it got too complicated / impossible due to the many dependencies GTK has. These all depedencies must be available or built on the CentOS 5 environment which in turn is used to build the wheels.

CentOS 5 is a very old release. The manylinux1 format requires that the wheels are built on that old version to be compatible with as many as possible GNU/Linux distributions. Manylinux2 (https://github.com/pypa/manylinux/pull/152) will update the requirement to CentOS 6.x, which will be hopefully easier to work with and makes it possible to either switch to Gtk or upgrade Qt to the most recent version.

In any case, it's most likely to impossible to provide pre-built packages which satisfy the needs of all users on all different platforms. There's always some compromise which has to be made considering the complexity of OpenCV.

SreenivasVRao commented 6 years ago

Just want to pitch in and say, I used opencv-python for CV 3.4.3, and while I do get the same "cannot move to target thread" error, the imshow, and waitKey() functions work fine.

Building from source, I remember the focus would switch to the imshow() window. I see that behaviour when I try imshow(), waitKey(0), and destroyAllWindows() in pycharm. However, on the terminal, the focus doesn't switch, but the window does appear, and when I alt-tab to that window, the behaviour is as expected.

It's a weird bug, and I'm sure @skvark must have spent a lot of time on it, but not something that's breaking my workflow.

for reference, python 2.7 opencv-python 3.4.3.18 virtualenv 16.0.0 Ubuntu 16.04

QMake version 3.0 Using Qt version 5.5.1 in /usr/lib/x86_64-linux-gnu

Happy to pitch in with any further info. Thanks a lot @skvark for your work on this. I've spent hours and hours getting OpenCV running with Python before, and these pip binaries are the best ever!