我可以在 Python 中从后台线程渲染 openCV 动画吗?

2024-02-11

我可以在 Python 中从后台线程渲染 openCV 动画吗?

这是我的尝试:

import cv2
import numpy as np
from time import sleep

bitmap = np.zeros((512,512,3),np.uint8)

import threading
import time

def update_bitmap():
    for i in range(512):
        bitmap[i,i,:] = 128
        sleep(1/32)

threading.Thread(target=update_bitmap).start()

def refresh_gui():
    hz = 30
    delta_t = 1 / hz
    t = time.time()
    while True:
        sleep(0.001)
        if time.time() > t+delta_t:
            t += delta_t
            cv2.imshow("Color Image", bitmap)
            cv2.waitKey(1)

threading.Thread(target=refresh_gui).start()

try:
    while True:
        print('tick')
        sleep(1)
except KeyboardInterrupt:
    cv2.destroyAllWindows()
    exit(0)

但是它失败了:

> python test.py
tick
2021-03-14 17:01:37.474 python[38483:2301820] WARNING: NSWindow drag regions should only be invalidated on the Main Thread! This will throw an exception in the future. Called from (
        0   AppKit                              0x00007fff22c7347f -[NSWindow(NSWindow_Theme) _postWindowNeedsToResetDragMarginsUnlessPostingDisabled] + 352
        1   AppKit                              0x00007fff22c5e121 -[NSWindow _initContent:styleMask:backing:defer:contentView:] + 1375
        2   AppKit                              0x00007fff22c5dbbb -[NSWindow initWithContentRect:styleMask:backing:defer:] + 42
        3   AppKit                              0x00007fff22f681f4 -[NSWindow initWithContentRect:styleMask:backing:defer:screen:] + 52
        4   cv2.cpython-37m-darwin.so           0x00000001084cc4f5 cvNamedWindow + 677
        5   cv2.cpython-37m-darwin.so           0x00000001084cbdbc cvShowImage + 188
        6   cv2.cpython-37m-darwin.so           0x00000001084ca286 _ZN2cv6imshowERKNSt3__112basic_stringIcNS0_11char_traitsIcEENS0_9allocatorIcEEEERKNS_11_InputArrayE + 230
        7   cv2.cpython-37m-darwin.so           0x000000010749515e _ZL18pyopencv_cv_imshowP7_objectS0_S0_ + 302
        8   python                              0x0000000106fcd4e8 _PyMethodDef_RawFastCallKeywords + 392
        9   python                              0x0000000107109ce2 call_function + 306
        10  python                              0x0000000107106a83 _PyEval_EvalFrameDefault + 42243
        11  python                              0x0000000106fccbe5 function_code_fastcall + 117
        12  python                              0x0000000107107bf2 _PyEval_EvalFrameDefault + 46706
        13  python                              0x0000000106fccbe5 function_code_fastcall + 117
        14  python                              0x0000000107109c67 call_function + 183
        15  python                              0x00000001071069ed _PyEval_EvalFrameDefault + 42093
        16  python                              0x0000000106fccbe5 function_code_fastcall + 117
        17  python                              0x0000000107109c67 call_function + 183
        18  python                              0x00000001071069ed _PyEval_EvalFrameDefault + 42093
        19  python                              0x0000000106fccbe5 function_code_fastcall + 117
        20  python                              0x0000000106fd0002 method_call + 130
        21  python                              0x0000000106fcda82 PyObject_Call + 130
        22  python                              0x00000001071eb89b t_bootstrap + 123
        23  python                              0x0000000107172937 pythread_wrapper + 39
        24  libsystem_pthread.dylib             0x00007fff20332950 _pthread_start + 224
        25  libsystem_pthread.dylib             0x00007fff2032e47b thread_start + 15
)
2021-03-14 17:01:37.482 python[38483:2301820] WARNING: nextEventMatchingMask should only be called from the Main Thread! This will throw an exception in the future.
tick
tick
tick
tick
tick
tick
tick
tick
tick
tick
tick
^C^CException ignored in: <module 'threading' from '/usr/local/anaconda3/lib/python3.7/threading.py'>
Traceback (most recent call last):
  File "/usr/local/anaconda3/lib/python3.7/threading.py", line 1308, in _shutdown
    lock.acquire()
KeyboardInterrupt

我真的希望我的渲染器位于单独的线程中。 干净多了! 能做到吗?


这并没有回答问题,但它解决了问题:

import cv2
import numpy as np
from time import sleep


import threading
import time

bitmap = np.zeros((512,512,3),np.uint8)
def update_bitmap():
    for i in range(512):
        bitmap[i,i,:] = 128
        sleep(1/32)


def main():
    threading.Thread(target=update_bitmap).start()

    hz = 30
    delta_t = 1 / hz
    t = time.time()
    try:
        while True:
            sleep(0.001)
            if time.time() > t+delta_t:
                t += delta_t
                cv2.imshow("Color Image", bitmap)
                cv2.waitKey(1)

    except KeyboardInterrupt:
        cv2.destroyAllWindows()
        exit(0)

main()
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

我可以在 Python 中从后台线程渲染 openCV 动画吗? 的相关文章

  • cv2.drawContours() - 取消填充字符内的圆圈(Python,OpenCV)

    根据 Silencer的建议 我使用了他发布的代码here https stackoverflow com questions 48244328 copy shape to blank canvas opencv python 482465
  • Python 是解释型的还是编译型的,或者两者兼而有之?

    据我了解 An 解释的语言是由解释器 将高级语言转换为机器代码然后执行的程序 实时运行和执行的高级语言 它一次处理一点程序 A compiled语言是一种高级语言 其代码首先由编译器 将高级语言转换为机器代码的程序 转换为机器代码 然后由执
  • PyTorch 给出 cuda 运行时错误

    我对我的代码做了一些小小的修改 以便它不使用 DataParallel and DistributedDataParallel 代码如下 import argparse import os import shutil import time
  • ImportError:运行 jupyter Notebook 时没有名为 IPython.paths 的模块?

    我通过以下方式安装了 jupyter usr local opt python bin python2 7 m pip install jupyter 这将安装 ipython 版本 4 1 2 但是 当我运行 jupyter Notebo
  • 如何将 Mat (opencv) 转换为 INDArray (DL4J)?

    我希望任何人都可以帮助我解决这个任务 我正在处理一些图像分类并尝试将 OpenCv 3 2 0 和 DL4J 结合起来 我知道DL4J也包含Opencv 但我认为它没什么用 谁能帮我 如何转换成 INDArray 我尝试阅读一些问题here
  • 对使用 importlib.util 导入的对象进行酸洗

    我在使用Python的pickle时遇到了一个问题 我需要通过将文件路径提供给 importlib util 来加载一些 Python 模块 如下所示 import importlib util spec importlib util sp
  • 如何从 JSON 响应重定向?

    所以我尝试使用 Flask 和 Javascript 上传器 Dropzone 上传文件并在上传完成后重定向 文件上传正常 但在烧瓶中使用传统的重定向 return redirect http somesite com 不执行任何操作 页面
  • 迭代列表的奇怪速度差异

    我创建了两个重复两个不同值的长列表 在第一个列表中 值交替出现 在第二个列表中 一个值出现在另一个值之前 a1 object object 10 6 a2 a1 2 a1 1 2 然后我迭代它们 不对它们执行任何操作 for in a1 p
  • 为什么我应该使用 WSGI?

    使用 mod python 一段时间了 我读了越来越多关于 WSGI 有多好的文章 但没有真正理解为什么 那么我为什么要切换到它呢 有什么好处 这很难吗 学习曲线值得吗 为了用 Python 开发复杂的 Web 应用程序 您可能会使用更全面
  • C++11 函数局部静态 const 对象的线程安全初始化

    这个问题已在 C 98 上下文中提出 并在该上下文中得到回答 但没有明确说明有关 C 11 的内容 const some type create const thingy lock my lock some mutex static con
  • 使用 pybtex 将 bibtex 转换为格式化的 HTML 参考书目,例如哈佛风格

    我正在使用 Django 并将 bibtex 存储在我的模型中 并且希望能够以格式化 HTML 字符串的形式向我的视图传递引用 使其看起来像哈佛引用样式 使用中描述的方法Pybtex 无法识别 bibtex 条目 https stackov
  • Flask 应用程序的测试覆盖率不起作用

    您好 想在终端的 Flask 应用程序中测试 删除路由 我可以看到测试已经过去 它说 test user delete test app LayoutTestCase ok 但是当我打开封面时 它仍然是红色的 这意味着没有覆盖它 请有人向我
  • sqlite3从打印数据中删除括号

    我创建了一个脚本 用于查找数据库第一行中的最后一个值 import sqlite3 global SerialNum conn sqlite3 connect MyFirstDB db conn text factory str c con
  • PIL - 需要抖动,但限制调色板会导致问题

    我是 Python 新手 正在尝试使用 PIL 来执行 Arduino 项目所需的解析任务 这个问题涉及到Image convert 方法以及调色板 抖动等选项 我有一些硬件能够一次仅显示 16 种颜色的图像 但它们可以指定为 RGB 三元
  • 字符串列表,获取n个元素的公共子串,Python

    我的问题可能类似于this https stackoverflow com questions 37514193 count the number of occurrences of n length not given string in
  • OSX 上的 locale.getlocale() 问题

    我需要获取系统区域设置来执行许多操作 最终我想使用 gettext 翻译我的应用程序 我打算在 Linux 和 OSX 上分发它 但我在 OSX Snow Leopard 上遇到了问题 python Python 2 5 2 r252 60
  • 如何重新启动死线程? [复制]

    这个问题在这里已经有答案了 有哪些不同的可能性可以带来死线程回到可运行状态 如果您查看线程生命周期图像 就会发现一旦线程终止 您就无法返回到新位置 So 没有办法将死线程恢复到可运行状态 相反 您应该创建一个新的 Thread 实例
  • 操作错误:(sqlite3.OperationalError) SQL 变量太多,同时将 SQL 与数据帧一起使用

    我有一个熊猫数据框 如下所示 activity User Id 0 VIEWED MOVIE 158d292ec18a49 1 VIEWED MOVIE 158d292ec18a49 2 VIEWED MOVIE 158d292ec18a4
  • 通过 Web 界面执行 python 单元测试

    是否可以通过 Web 界面执行单元测试 如果可以 如何执行 EDIT 现在我想要结果 对于测试 我希望它们是自动化的 可能每次我对代码进行更改时 抱歉我忘了说得更清楚 EDIT 这个答案此时已经过时了 Use Jenkins https j
  • python 日志记录会刷新每个日志吗?

    当我使用标准模块将日志写入文件时logging 每个日志会分别刷新到磁盘吗 例如 下面的代码会将日志刷新 10 次吗 logging basicConfig level logging DEBUG filename debug log fo

随机推荐