3

我正在寻找从 PyQt 中将 QImage 转换为 OpenCV (CV2) Mat 格式的函数。

我该怎么做呢?到目前为止,我一直在使用的输入图像是作为 QImage 加载的 PNG(RGB 或 RGBA)。

最终,我想获取两个 QImage 并使用 matchTemplate 函数在另一个图像中找到一个图像,所以如果有比我现在找到的更好的方法来做到这一点,我也愿意接受。但是能够轻松地在两者之间来回转换将是理想的。

谢谢你的帮助,

4

2 回答 2

3

经过在这里的大量搜索,我找到了一个让我找到工作解决方案的宝石。我从这个答案中得出了我的大部分代码到另一个问题: https ://stackoverflow.com/a/11399959/1988561

我遇到的关键挑战是如何正确使用指针。我认为我缺少的一件大事是 setsize 函数。

这是我的进口:

import cv2
import numpy as np

这是我的功能:

def convertQImageToMat(incomingImage):
    '''  Converts a QImage into an opencv MAT format  '''

    incomingImage = incomingImage.convertToFormat(4)

    width = incomingImage.width()
    height = incomingImage.height()

    ptr = incomingImage.bits()
    ptr.setsize(incomingImage.byteCount())
    arr = np.array(ptr).reshape(height, width, 4)  #  Copies the data
    return arr
于 2013-08-26T17:50:19.547 回答
0

我尝试了上面给出的答案,但无法得到预期的结果。我尝试了这种粗略的方法,我使用 QImage 类的save()方法保存图像,然后使用图像文件在 cv2 中读取它

这是一个示例代码

def qimg2cv(q_img):
    q_img.save('temp.png', 'png')
    mat = cv2.imread('temp.png')
    return mat

完成文件后,您可以删除生成的临时图像文件。这可能不是完成工作的正确方法,但仍然可以完成所需的工作。

于 2019-04-15T14:39:47.083 回答