Wooden
Wooden

Reputation: 31

cv2.imshow() starts without poping up a window when called in threading

cv2.imshow() do not pop up the window when called in the threading. An icon of python3 appears in the docker, but no window, no plot. Besides, I need the function of half-duplex communication, thus I cannot just remove threading. How can I correctly show the picture inside threading? Any response is appreciated.

Background: MacOS Catalina, python==3.5, opencv==3.4.2

import cv2
import threading

def run():
    # start the camera
    video_reader = cv2.VideoCapture(0)
    while True:
        # collect image
        ret_val, image = video_reader.read()
        cv2.imshow('image', image)
        if cv2.waitKey(1) == 27:
            break  # esc to quit

t = threading.Thread(target=run, name="run")
t.start()

Some Warning messages that may help:

python3[86286:1964642] WARNING: NSWindow drag regions should only be invalidated on the Main Thread! This will throw an exception in the future. Called from (
    0   AppKit                              0x00007fff2fc177f0 -[NSWindow(NSWindow_Theme) _postWindowNeedsToResetDragMarginsUnlessPostingDisabled] + 371
    1   AppKit                              0x00007fff2fc14ce1 -[NSWindow _initContent:styleMask:backing:defer:contentView:] + 1416
    2   AppKit                              0x00007fff2fc14753 -[NSWindow initWithContentRect:styleMask:backing:defer:] + 42
    3   AppKit                              0x00007fff2fea8368 -[NSWindow initWithContentRect:styleMask:backing:defer:screen:] + 52
    4   libopencv_highgui.3.4.2.dylib       0x000000010327bee7 cvNamedWindow + 727
    5   libopencv_highgui.3.4.2.dylib       0x000000010327b7a3 cvShowImage + 195
    6   libopencv_highgui.3.4.2.dylib       0x000000010327860d _ZN2cv6imshowERKNS_6StringERKNS_11_InputArrayE + 477
    7   cv2.cpython-35m-darwin.so           0x00000001014f8393 _ZL18pyopencv_cv_imshowP7_objectS0_S0_ + 387
    8   python3                             0x0000000100ca759f PyCFunction_Call + 127
    9   python3                             0x0000000100d6eec7 PyEval_EvalFrameEx + 18583
    10  python3                             0x0000000100d68faf _PyEval_EvalCodeWithName + 335
    11  python3                             0x0000000100c746aa function_call + 106
    12  python3                             0x0000000100c30b35 PyObject_Call + 69
    13  python3                             0x0000000100d6fc9b PyEval_EvalFrameEx + 22123
    14  python3                             0x0000000100d6efb8 PyEval_EvalFrameEx + 18824
    15  python3                             0x0000000100d6efb8 PyEval_EvalFrameEx + 18824
    16  python3                             0x0000000100d68faf _PyEval_EvalCodeWithName + 335
    17  python3                             0x0000000100c746aa function_call + 106
    18  python3                             0x0000000100c30b35 PyObject_Call + 69
    19  python3                             0x0000000100c53694 method_call + 148
    20  python3                             0x0000000100c30b35 PyObject_Call + 69
    21  python3                             0x0000000100d77bf4 PyEval_CallObjectWithKeywords + 68
    22  python3                             0x0000000100de472a t_bootstrap + 122
    23  libsystem_pthread.dylib             0x00007fff69e8cd76 _pthread_start + 125
    24  libsystem_pthread.dylib             0x00007fff69e895d7 thread_start + 15
)
2019-10-14 15:20:27.485 python3[86286:1964642] WARNING: nextEventMatchingMask should only be called from the Main Thread! This will throw an exception in the future.

Upvotes: 3

Views: 1624

Answers (1)

incubo4u
incubo4u

Reputation: 77

Apple only allows native UI functionality to be used on the main thread in macOS and iOS.

Upvotes: 5

Related Questions