当前位置: 首页 > 面试题库 >

QImage构造函数具有未知的关键字data

禄星腾
2023-03-14
问题内容

假设我正在使用opencv从网络摄像头拍摄图像。

_, img = self.cap.read()  # numpy.ndarray (480, 640, 3)

然后我QImage使用创建一个qimg img

qimg = QImage(
    data=img,
    width=img.shape[1],
    height=img.shape[0],
    bytesPerLine=img.strides[0],
    format=QImage.Format_Indexed8)

但是它给出了一个错误,说明:

TypeError:“数据”是未知的关键字参数

但是在本文档中说过,构造函数应该有一个名为的参数data

我正在使用anaconda环境来运行此项目。

opencv版本= 3.1.4

pyqt版本= 5.9.2

numpy的版本= 1.15.0


问题答案:

它们所指示的是需要将数据作为参数,而不是将关键字称为data,以下方法将numpy / opencv图像转换为QImage:

from PyQt5.QtGui import QImage, qRgb
import numpy as np
import cv2

gray_color_table = [qRgb(i, i, i) for i in range(256)]

def NumpyToQImage(im):
    qim = QImage()
    if im is None:
        return qim
    if im.dtype == np.uint8:
        if len(im.shape) == 2:
            qim = QImage(im.data, im.shape[1], im.shape[0], im.strides[0], QImage.Format_Indexed8)
            qim.setColorTable(gray_color_table)
        elif len(im.shape) == 3:
            if im.shape[2] == 3:
                qim = QImage(im.data, im.shape[1], im.shape[0], im.strides[0], QImage.Format_RGB888)
            elif im.shape[2] == 4:
                qim = QImage(im.data, im.shape[1], im.shape[0], im.strides[0], QImage.Format_ARGB32)
    return qim

img = cv2.imread('/path/of/image')
qimg = NumpyToQImage(img)
assert(not qimg.isNull())

或者您可以使用qimage2ndarray库

当使用索引裁剪图像时,仅修改shape而不是data,解决方案是进行复制

img = cv2.imread('/path/of/image')
img = np.copy(img[200:500, 300:500, :]) # copy image
qimg = NumpyToQImage(img)
assert(not qimg.isNull())


 类似资料:
  • 问题内容: 以下是两种方法: 具有所有类属性的构造函数 优点:我必须输入确切数量的参数类型,所以如果出现错误,编译器会警告我(顺便说一句,有什么方法可以防止错误地在参数列表中切换两个Integer的问题?) 缺点:如果我有很多属性,则实例化行可能会变得很长,并且可能跨越两行或更多行 setter和默认的空构造函数 优点:我可以清楚地看到自己的设置,因此,如果我做错了什么,我可以在键入时立即查明它(

  • 无论我用什么方法尝试,无论是主构造函数还是次构造函数,我都不知道如何在kotlin中声明一个带有超类和构造函数的新类。 这是我最想做的,但它给出了一个错误,期望成员声明。 这是我认为主要构造函数的外观,但它给出了相同的错误。在Internet上搜索没有帮助,我只能找到第二个示例。 那么,用一个超类和它的一个构造函数创建一个类的所有有效方法是什么呢?

  • 问题内容: 在春季,bean的类可能没有公共构造函数,而只有私有构造函数吗?创建bean时会调用此私有构造函数吗?谢谢。 问题答案: 是的,Spring可以调用私有构造函数。如果找到具有正确参数的构造函数,无论可见性如何,它将使用反射将其构造函数设置为可访问的。

  • 这个问题是由打字错误或无法再复制的问题引起的。虽然类似的问题可能在这里是主题,但这个问题的解决方式不太可能对未来的读者有所帮助。 Java构造函数不工作。 我需要制作三个构造函数和一个打印方法。然后制作三个对象并打印它们。如果我在标题中写的问题有误,请原谅我。我几乎不知道我的代码是怎么回事。但它就在这里。谁能告诉我它有什么问题以及我如何解决它。 下面是错误:Minor.java:51:错误:没有为

  • 在.citydoor.imports.catalog.tools中打包;

  • 问题内容: 我需要创建一个没有构造函数参数的不完整对象。像这样 我希望这个Bean是Spring管理的,以便以后可以使用Spring AOP。 但是我的bean需要将超时作为动态值传递-是否有一种方法可以创建在构造函数中注入了动态值的spring托管bean? 问题答案: 有一个方法,根据javadoc,它允许您指定构造函数参数,该参数用于覆盖bean定义自己的参数。因此,您可以在bean文件中放