QPixmap能显示cv2的图片吗
时间: 2023-08-01 07:11:57 浏览: 172
是的,可以使用OpenCV的cv2库读取图片,然后将其转换为Qt中的QPixmap格式进行显示。下面是一个示例代码:
```python
import cv2
from PyQt5.QtGui import QPixmap, QImage
# 读取图片
img = cv2.imread('example.jpg')
# 转换为QImage格式
qimg = QImage(img.data, img.shape[1], img.shape[0], QImage.Format_RGB888)
# 转换为QPixmap格式
qpix = QPixmap.fromImage(qimg)
# 显示图片
label.setPixmap(qpix)
```
其中,label是一个Qt中的QLabel控件,用于显示图片。
相关问题
class classify_system(QMainWindow,Ui_MainWindow): def __init__(self,parent=None): super(classify_system,self).__init__(parent) self.setupUi(self) #将输入图片按钮,pushButton与openimage关联起来 self.pushButton.clicked.connect(self.openimage) self.label_2.setAlignment(Qt.AlignCenter)#图像居中显示 def openimage(self): name,type=QFileDialog.getOpenFileName(self,"打开图片","","*.jpg;;*.png;;*.jpeg;;All Files(*)") img=cv2.imread(name) img=cv2.resize(img,(400,400),interpolation=cv2.INTER_CUBIC) qimg=qimage2ndarray.array2qimage(img) self.label_2.setPixmap(QPixmap(qimg)) self.label_2.show() img=img.astype('float')/255.0 #224*224满足模型输入要求 img=cv2.resize(img,(224,224),interpolation=cv2.INTER_CUBIC) img=np.expand_dims(img,axis=0)#添加尺寸,满足模型输入需求 MobileNet=tf.keras.applications.MobileNet(include_top=True,weights='imagenet') result=MobileNet.predict(img)#模型预测 #获得预测结果 result=tf.keras.applications.imagenet_utils.decode_predictions(result,top=1) predictClass=result[0][0][1] predictProb=result[0][0][2] #将预测结果显示至图像上 return_img=cv2.putText(self.img,str(predictClass)+":"+str(predictProb),(50,100),cv2.FONT_HERSHEY_DUPLEX,1.2,(255,255,255),2,) qimg2=qimage2ndarray.array2qimage(return_img) self.label_2.setPixmap(QPixmap(qimg2)) self.label_2.show()
这段代码是一个基于 PyQt5 和 TensorFlow 的图像分类系统,它可以打开用户选择的图片,并使用 MobileNet 模型对其进行分类预测。具体来说,当用户点击“输入图片”按钮时,程序会弹出文件选择对话框,让用户选择一张图片。然后程序会使用 OpenCV 库读取该图片,并将其缩放到 400×400 像素大小,并显示在程序窗口中心的标签上。接着,程序会将图像转换为浮点格式,并缩放到 224×224 像素大小,以符合 MobileNet 模型的输入要求。然后程序会将图像添加一个维度,以便将其传递给 MobileNet 模型进行预测。在预测完成后,程序会将预测结果绘制在原始图像上,并显示在标签上,以便用户查看。
ret, frame = self.cap.read() QApplication.processEvents() frame = imutils.resize(frame, width=500) # frame = cv2.putText(frame, "Have token {}/{} faces".format(self.have_token_photos, # self.Dialog.spinBox_set_num.text()), (50, 60), cv2.FONT_HERSHEY_SIMPLEX, 0.7, (200, 100, 50), 2) 显示输出框架 show_video = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB) # 这里指的是显示原图 # opencv读取图片的样式,不能通过Qlabel进行显示,需要转换为Qimage。 # QImage(uchar * data, int width, int height, int bytesPerLine, Format format) self.showImage = QImage(show_video.data, show_video.shape[1], show_video.shape[0], QImage.Format_RGB888) self.Dialog.label_capture.setPixmap(QPixmap.fromImage(self.showImage))
这段代码是一个视频捕获与显示的过程,首先通过OpenCV库中的cv2.VideoCapture()函数读取摄像头的视频帧,然后通过imutils库中的resize()函数将视频帧的大小调整为宽度为500像素,接着将视频帧转换为RGB格式并显示在GUI界面上的QLabel控件中。其中,QImage类用于将OpenCV中的视频帧转换为适合在GUI界面上显示的图像格式。最后,通过QPixmap类中的fromImage()函数将QImage类型的图像转换为可以在QLabel控件上显示的图像格式。
阅读全文