当前位置: 首页 > 知识库问答 >
问题:

OpenCV imshow()防止Qt/python崩溃

齐迪
2023-03-14
import socket
import cv2
from PyQt4 import QtCore, QtGui, uic

while True:
    data, addr = self.sock.recvfrom(10240)

    # after some processing on data to get im_data ...
    self.im_data_color_resized = cv2.resize(im_data, (0, 0), interpolation = True)

    # using OpenCV to show the video (the entire code works with cv2.imshow but not without it)
    cv2.imshow('Real Time Image', self.im_data_color_resized)
    cv2.waitKey(10)

    # using QLabel to show the video
    qtimage = cv2.cvtColor(self.im_data_color_resized, cv2.COLOR_BGR2RGB)
    height, width, bpc = qtimage.shape

    bpl = bpc * width
    qimage = QtGui.QImage(qtimage.data, width, height, bpl, QtGui.QImage.Format_RGB888)

    self.imageViewer_label.setPixmap(QtGui.QPixmap.fromImage(qimage))

共有1个答案

酆耀
2023-03-14

您需要刷新事件队列,以便更新您的GUI。在setpixamp函数之后添加qtgui.qapplication.processevents()

它与cv2.waitkey()一起工作,因为它已经在内部刷新了绘画事件,允许刷新Qt GUI。但我建议不要依赖于此攻击,并使用processevents显式刷新Qt事件。

您可能还希望将此处理循环放在它自己的线程中,以使GUI/主线程具有响应性。

 类似资料:
  • 我有一个discord bot,我正在处理一个命令,该命令从mysql数据库中显示关于一个字符的信息(通过提供字符名)。它工作得很好,但如果我提供了一个数据库中不存在的名称,如,则bot会崩溃。所以我的问题是。希望你能理解我的意思。 代码如下: 如果你需要我提供你更多的信息,让我知道。 感谢任何帮助!

  • 问题内容: 我一直在开发一个Android应用程序,该应用程序经常使用以防止它崩溃,即使在不需要的地方也是如此。例如, 在视图与被引用,如: 在整个应用程序中都使用这种方法。堆栈跟踪没有打印出来,很难找到问题所在。该应用程序突然关闭而不打印任何堆栈跟踪。 我请我的长辈向我解释一下,他说: 这是为了防止生产崩溃。 我完全不同意 。对我来说,这不是防止应用程序崩溃的方法。它表明开发人员 不 知道自己在

  • 问题内容: 如果原始类未知,将导致崩溃。我已经看到再追从斯威夫特的早期历史这个问题的日期,使用Objective C语言所需的唯一解决方案(也预先日斯威夫特2的实现,,和)。我可以弄清楚Objective C的路线- 但如果可能的话,我宁愿理解仅Swift的解决方案。 例如- 数据已使用编码。如果编码数据的类别未知,则以下代码将失败。 我正在寻找一种Swift 2唯一的方法来尝试尝试之前测试数据是

  • 我让我的学长给我解释,他说, 这是为了防止生产中的崩溃。 我完全不同意。对我来说,这不是防止应用程序崩溃的方法。这表明开发人员不知道他/她在做什么,并有疑问。 由于这个问题得到了很多关注,有些人误解了这个问题(可能是因为我没有清楚地表达它),我打算重新表达它。 以下是开发人员在这里所做的 > 编写并测试一个函数,它可以是一个只是初始化视图的小函数,也可以是一个复杂的函数,测试后它被包裹在块中。即使

  • 问题内容: 尽管像这样 的元素通常会增长以适应其内容,但是使用float属性会给 CSS新手带来一个惊人的问题:如果浮动元素具有非浮动父元素,则父元素会折叠。 例如: 在此示例中,父div 不会扩展为包含其浮动的子级-似乎有height: 0。 你怎么解决这个问题? 我想在这里创建一个详尽的解决方案列表。如果您知道跨浏览器的兼容性问题,请指出。 解决方案1 Float the parent. 优点

  • 我是否缺少一些配置选项来防止它崩溃?通常情况下,所有异常都会被捕获并返回一个500错误,而服务器仍然处于活动状态。