目录
1.安装pyinstaller
2.生成.exe文件
方法1:
方法2:
方法3:
(1)使用命令行窗口进入项目的根目录
(2)在改目录下执行pyi-makespec main.py(main.py是你的主入口文件)
(3)修改main.spec文件
(4)执行 pyinstaller -F main.spec命令
(5)在dist/main文件夹里面点击.exe文件
参考:
不同博主关于生成exe文件的文章
bug解决
生成图标
1.安装pyinstaller
我这里是使用清华的镜像下载的,因为直接使用 pip install 速度会慢一点,使用国内的镜像网站那速度可蹭蹭的快啊。
pip install -i http://pypi.douban.com/simple/ pyinstaller
2.生成.exe文件
方法1:
### pyinstaller 所有需要打包的py文件 -p 环境site-packages绝对路径
### 注意:py文件的路径需要以第一个py文件为准
pyinstaller Voc_xml_expander.py dataTransform.py Voc_xml_expander_logic.py
images_transform.py labels_transform.py -p D:\softwares_install\Anaconda3\envs\Train\Lib\site-packages
方法2:
最直接的方法:
pyinstaller -F -w 主py文件的绝对路径
pyinstaller -F -w C:\Users\...\Main.py
方法3:
其他比较全面的方法
(1)使用命令行窗口进入项目的根目录
我这里就是 进入到E:\ljl\bank。
(2)在改目录下执行pyi-makespec main.py(main.py是你的主入口文件)
执行完毕之后,会生成一个main.spec文件
(3)修改main.spec文件
刚开始main.spec文件打开后是
1.要在第一行,也就是a = Analysis([‘main.py’])这里面添加你的所有的.py文件,注意是所有的而且只能是.py文件,第一个是代码你的入口文件。
另外假如.py文件不是与你的主入口文件main.py文件在同一个目录下,那么该文件要写绝对路径。
2.修改datas(放一些图片音频等文件),这里面是放非.py文件,这里是以元组的形式,(“文件夹的绝对路径”,“文件夹名”)注意这里不是写具体的文件名,而是文件夹。
下面是我修改过后的:
我这里data里面有一个.txt文件,像什么照片啦,音频啦同样的道理。
(4)执行 pyinstaller -F main.spec命令
在界面中输入 pyinstaller -F -w -i tubiao.ico pyexe.spec(-i 后面跟着的是exe程序的图标,最后跟.spec文件)
(-F:产生一个文件;-w:使用Windows子系统执行,不会打开命令行)
pyinstaller -F mycode.py --noconsole
还可以这样pyinstaller -F -w mycode.spec (-w就是取消窗口)
这时候会生成两个文件夹,build和dist。然后.exe文件就在里面,快点开看看吧。
(5)在dist/main文件夹里面点击.exe文件
哇塞,好厉害哟,下次就直接把这个文件夹发给比人就好啦。
import cv2
import numpy as np
import os#使用os的path模块来获得桌面的路径
def desktop_path():return os.path.join(os.path.expanduser('~'),"Desktop")
# print(desktop_path())#收集用户需要输入的参数
def inputParams():path = input("输入需要换底色的正装照绝对路径:")orignColor = input("输入当前正装照的底色:蓝色——b,红色——r:")changedColor = input("输入需要换成正装照的底色:蓝色——b,红色——r,白色——w:")return path,orignColor,changedColor#蓝底换成其他的颜色
def Blue2Others(path,changedColor):img = cv2.imread(path)# 图像缩放img = cv2.resize(img, None, fx=0.5, fy=0.5)rows, cols, channels = img.shape# 图片转换为灰度图hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)# 图片的二值化处理,可能会出现噪声(白点),有的图片显示的很明显,这就需要我们进行腐蚀或膨胀。lower_blue = np.array([70, 70, 70])upper_blue = np.array([110, 255, 255])mask = cv2.inRange(hsv, lower_blue, upper_blue) # 蓝色范围内变白,其余之外全部变黑# 腐蚀膨胀,主要用于去处噪声erode = cv2.erode(mask, None, iterations=1) # 进行腐蚀操作dilate = cv2.dilate(erode, None, iterations=1) # 进行膨胀操作# 遍历每个像素点,进行颜色的替换for i in range(rows):for j in range(cols):if dilate[i, j] == 255: # 像素点为255表示的是白色,此处将白色处的像素点替换为红色(将if dilate[i,j]==255中的dilate换成erode对比试试)if changedColor == 'r':img[i, j] = (50, 50, 255) # 此行将蓝底替换成红底,即(0,0,255)代表红色,由于历史原因,为BGR(蓝绿红)通道,不是RGB(红绿蓝)通道,所以255放第三个位置else:img[i,j] = (255,255,255) # 此行将蓝底替换成白底,即(255,255,255)代表白色return img# 红底换成其他的颜色
def Red2Others(path, changedColor):img = cv2.imread(path)# 图像缩放img = cv2.resize(img, None, fx=0.5, fy=0.5)rows, cols, channels = img.shape# 图片转换为灰度图hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)# 图片的二值化处理,可能会出现噪声(白点),有的图片显示的很明显,这就需要我们进行腐蚀或膨胀。lower_red = np.array([0, 90, 70])upper_red = np.array([110, 255, 255])mask = cv2.inRange(hsv, lower_red, upper_red) # 蓝色范围内变白,其余之外全部变黑# 腐蚀膨胀,主要用于去处噪声erode = cv2.erode(mask, None, iterations=1) # 进行腐蚀操作dilate = cv2.dilate(erode, None, iterations=2) # 进行膨胀操作# 遍历每个像素点,进行颜色的替换for i in range(rows):for j in range(cols):if dilate[i, j] == 255: # 像素点为255表示的是白色,此处将白色处的像素点替换为红色(将if dilate[i,j]==255中的dilate换成erode对比试试)if changedColor == 'b':img[i, j] = (255, 0, 0) # 此行将红底替换成蓝底,即(255,0,0)代表lan色,由于历史原因,为BGR(蓝绿红)通道,不是RGB(红绿蓝)通道,所以255放第三个位置else:img[i, j] = (255, 255, 255) # 此行将红底替换成白底,即(255,255,255)代表白色return imgdef main():path, orignColor, changedColor = inputParams()if orignColor == 'r':img = Red2Others(path,changedColor)elif orignColor == 'b':img = Blue2Others(path,changedColor)print("选中显示的图片,按下s键保存图片")cv2.imshow('changedImg',img)# 窗口等待的命令,0表示无限等待k = cv2.waitKey(0) #监听键盘事件if k == ord('s'): #英文状态下键盘按s键,会将图片保存至桌面# font = cv2.FONT_HERSHEY_DUPLEX#参数依次为:涂鸦的图片、涂鸦的文字、位置、字体、字体大小、字体颜色、字体画笔粗细# img = cv2.putText(img,"girl",(10,30),font,0.5,(0,0,0),2)desktopPath = desktop_path()savePath = desktopPath + "\changedImg.jpg"print("照片已保存至:%s" % savePath)cv2.imwrite(savePath,img, [int(cv2.IMWRITE_JPEG_QUALITY),100])cv2.destroyWindow('changedImg') #保存完后销毁名称为red的窗口else:cv2.destroyAllWindows()if __name__ == '__main__':try:main()except:print("请输入正确路径、原底色以及需要换的底色代号!!!")
参考:
不同博主关于生成exe文件的文章
Pyinstaller使用 - 知乎
【Python】-如何将自己所写的程序打包然后在别人的电脑上运行(使用pyinstall打包多个.py文件成.exe)_放开这颗白菜让我来-CSDN博客_python打包exe到别的电脑
学习笔记(42):Python实战编程-pyinstaller程序打包_python_AI_fans的博客-CSDN博客
pyinstaller打包时提示UPX is not available._Veiko的博客-CSDN博客
https://blog.csdn.net/qq_27017791/article/details/102748766
https://blog.csdn.net/ZhangHW_/article/details/99697285
bug解决
pyinstaller打包时提示UPX is not available._Veiko的博客-CSDN博客
pyinstaller设置icon图标出现“struct.error: unpack requires a buffer of 16 bytes” - Amy鱼 - 博客园
生成图标
在线生成透明ICO图标——ICO图标制作