目錄
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圖標制作