之前在用pyqt做一个界面的时候,需要把程序打包成exe文件。使用pyinstaller打包后发现程序界面上的图片不见了,查阅很多资料,也没有得到解决,在此提出一种比较傻缺的做法,将图片像素赋值给一个矩阵数组,然后将矩阵数组转换为pyqt可处理的Qpixmap文件,就可以进行界面图片加载,并且可用。
import cv2 as cv
import numpy as np
from PIL import Image
data_wbc = [[[255, 255, 255], [255, 255, 255], [255, 255, 255], [255, 255, 255], [255, 255, 255], [255, 255, 255],
[255, 255, 255], [255, 255, 255], [255, 255, 255], [255, 255, 255], [255, 255, 255], [255, 255, 255],
[255, 255, 255], [255, 255, 255], [255, 255, 255], [255, 255, 255], [255, 255, 255], [255, 255, 255],
[255, 255, 255], [255, 255, 255], [255, 255, 255], [255, 255, 255], [255, 255, 255], [255, 255, 255],
[255, 255, 255], [255, 255, 255], [255, 255, 255], [255, 255, 255], [255, 255, 255], [255, 255, 255],
[255, 255, 255], [255, 255, 255], [255, 255, 255], [255, 255, 255], [255, 255, 255], [255, 255, 255],
[255, 255, 255], [255, 255, 255], [255, 255, 255], [255, 255, 255], [255, 255, 255], [255, 255, 255],
[255, 255, 255], [255, 255, 255], [255, 255, 255], [255, 255, 255], [255, 255, 255], [255, 255, 255],
[255, 255, 255], [255, 255, 255], [255, 255, 255], [255, 255, 255], [255, 255, 255], [255, 255, 255],
[255, 255, 255], [255, 255, 255], [255, 255, 255], [255, 255, 255], [255, 255, 255], [255, 255, 255],
[255, 255, 255], [255, 255, 255], [255, 255, 255], [255, 255, 255], [255, 255, 255], [255, 255, 255],
[255, 255, 255], [255, 255, 255], [255, 255, 255], [255, 255, 255], [255, 255, 255], [255, 255, 255],
[255, 255, 255], [255, 255, 255], [255, 255, 255], [255, 255, 255], [255, 255, 255], [255, 255, 255]]]
data = np.array(data_wbc)
img = Image.fromarray(data.astype('uint8'))
pixmap = img.toqpixmap()
imgage = img.toqimage()
字数限制,截取一小部分。三维数据为data_wbc,首先使用np转换为data,再使用Image转换为PIL的Image格式图片,该格式自带toqpixmap和toqimage格式转化。
PIL的Image也可以转换为OPENCV格式图片:
img2 = cv.cvtColor(np.asarray(img),cv.COLOR_RGB2BGR)
cv.imshow("OpenCV",img2)
cv.waitKey()
反过来,opencv图片也可以转换为PIL图片,然后转换为pyqt可识别图片。
img = cv.imread("chuan.jpg")
image = Image.fromarray(cv.cvtColor(img,cv.COLOR_BGR2RGB))
image.show()
cv.waitKey()