在Python中将OpenCV 3 (iplImage)转换为PyQt5 QImage/QPixmap

3

在将这个问题视为重复之前,请注意:

  • 使用OpenCV版本3(不是版本2)
  • 使用Python 3(而不是C++)
  • 使用PyQt5(而不是PyQt4)

目标:尝试在PyQt5 GUI窗口中流式传输OpenCV网络摄像头视频帧。

# For testing, I'm simply reading in a single image instead of a video frame

frame = cv2.imread('Koala.jpg',0)     # this is a numpy.ndarray object
height, width = frame.shape         
my_image = QImage(frame.tostring(), width, height, QImage.Format_RGB888)

# By here, things seem okay. print(mimage) basically says <QImage object at 0x32243>

# my_image.rgbSwapped()               # This line crashes program
pixmap = QPixmap.fromImage(mimage)    # This line crashes program as well

我不确定如何再调试了。没有任何错误回溯被打印到控制台。非常感谢您的帮助。

1个回答

2

首先,你需要将openCv图像转换为QImage格式,然后使用pixmap来显示图像,因为pixmap支持QImage格式。

   height, width, bytesPerComponent = Img.shape
   bytesPerLine = 3 * width
   cv2.cvtColor(Img, cv2.COLOR_BGR2RGB, Img)                                           
   QImg = QImage(Img.data, width, height, bytesPerLine,QImage.Format_RGB888)

现在使用QImg将其转换为Pixmap。
   pixmap = QPixmap.fromImage(QImg)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接