【项目实战】——Python打包正装换底色代码为exe文件(可在其他无Python环境下运行)

目录

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 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文件的文章

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图标制作

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

有情怀的机械男

你的鼓励将是我最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值