我想创建一个函数,从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
您可以删除在处理完文件后生成的临时图像文件。这可能不是正确的工作方法,但仍然可以完成所需的工作。