目录
(2)在改目录下执行pyi-makespec main.py(main.py是你的主入口文件)
(4)执行 pyinstaller -F main.spec命令
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 img
def 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文件的文章
【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鱼 - 博客园