我正在寻找创建一个函数,用于在PyQt中将QImage转换为OpenCV(CV2)Mat格式。
我该怎么做?到目前为止,我一直在使用的输入图像是作为QImage加载的PNG(RGB或RGBA)。
最终,我想采取两个QImages并使用matchTemplate函数在另一个中找到一个图像,所以如果有更好的方法来做到这一点,我现在也是如此,我也对此持开放态度。但是能够在两者之间来回转换是理想的。
感谢您的帮助,
答案 0 :(得分:2)
经过多次搜索,我找到了一颗宝石,让我找到了解决方案。我从这个问题的答案中得到了很多代码: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
答案 1 :(得分:0)
我尝试了上面给出的答案,但无法获得预期的结果。我尝试了这种粗略的方法,即使用QImage类的save()方法保存图像,然后使用图像文件在cv2中读取图像
这是示例代码
def qimg2cv(q_img):
q_img.save('temp.png', 'png')
mat = cv2.imread('temp.png')
return mat
完成文件操作后,您可以删除生成的临时图像文件。 这可能不是正确的方法,但仍然可以完成所需的工作。