我正在寻找从 PyQt 中将 QImage 转换为 OpenCV (CV2) Mat 格式的函数。
我该怎么做呢?到目前为止,我一直在使用的输入图像是作为 QImage 加载的 PNG(RGB 或 RGBA)。
最终,我想获取两个 QImage 并使用 matchTemplate 函数在另一个图像中找到一个图像,所以如果有比我现在找到的更好的方法来做到这一点,我也愿意接受。但是能够轻松地在两者之间来回转换将是理想的。
谢谢你的帮助,
经过在这里的大量搜索,我找到了一个让我找到工作解决方案的宝石。我从这个答案中得出了我的大部分代码到另一个问题: 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
完成文件后,您可以删除生成的临时图像文件。这可能不是完成工作的正确方法,但仍然可以完成所需的工作。