PyQt/PySide:如何将QImage转换为OpenCV的MAT格式



我想创建一个函数,从PyQt中将QImage转换为OpenCV(CV2)Mat格式。

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

最终,我想拍摄两张QImages,并使用matchTemplate函数在另一张中找到一张图像,所以如果有比我现在发现的更好的方法,我也对此持开放态度。但能够轻松地在两者之间来回转换将是理想的。

感谢您的帮助,

在这里搜索了很多之后,我发现了一个gem,它为我提供了一个有效的解决方案。我的大部分代码都来自于对另一个问题的回答: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

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

这是的样本代码

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

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

相关内容

  • 没有找到相关文章

最新更新