使用pyinstaller + tkinter打包圖形介面完成opencv+ffmpeg處理影片水印
1. 使用python+opencv解析影片
使用opencv進行影片解析,獲取每一幀影像後需要對該幀影像進行模組匹配進行水印影像查詢。
(對多個影片操作,查詢到水印的影片儲存到list中等待下一步處理,未查詢到的影片儲存到失敗list中)
logger.info('開始進行影片影像處理...')
watermark_path = "G:\\video\\watermark\\test.png"
video_path = "G:\\video\\video.mp4"
video = cv2.VideoCapture(video_path)
index = 0
success, frame = video.read()
while success:
logger.info('開始進行每一幀影像處理!')
// 透過opencv中模組匹配進行判斷該幀是否存在水印
result = self.find_watermark(frame, watermark_path)
if result == 1:
self.deal_list.append(watermark_path, video_path)
video.release()
logger.info('影片匹配成功!跳出迴圈!')
return True
if index == 600:
logger.error('600幀均未找到影片水印!' + "路徑:" + str(video_path))
video.release()
return False
success, frame = video.read()
index = index + 1
self.no_watermark_list.append(video_info)
logger.error('影片處理失敗!沒有找到幀影像!' + str(success) + "路徑:" + str(video_path))
2. 使用opencv+numpy查詢水印
logger.info('開始進行幀影像模組匹配...')
template = cv2.imread(watermark_path)
// 進行模組匹配
res = cv2.matchTemplate(img, template, cv2.TM_CCOEFF_NORMED)
// 指定一個閾值
threshold = 0.8
// 將匹配區域的座標儲存在numpy陣列中
loc = np.where(res >= threshold)
x = loc[0]
y = loc[1]
if len(x) and len(y):
for pt in zip(*loc[::-1]):
// 儲存找到水印的座標方便ffmpeg進行水印去除操作
self.watermark_index_left = pt[0]
self.watermark_index_top = pt[1]
logger.info('幀影像模組匹配成功!left:' + str(pt[0]) + ",top:" + str(pt[1]))
return True
else:
logger.error('幀影像模組匹配失敗!繼續重試!')
return False
3. 使用ffmpeg處理影片中水印
ffmpeg需要在本地環境安裝,windows安裝自行搜尋,安裝後需配置環境變數!
logger.info('ffmpeg開始處理單個影片水印... 影片路徑:' + video_path)
try:
// ffmpeg中去除水印,需要提供影片路徑,水印在影片中座標以及水印寬高
text = 'ffmpeg -i \"%s\" -vf "delogo=x=%s:y=%s:w=%s:h=%s:show=0" -c:a copy \"%s\" -y' % (
video_path, watermark_left, watermark_top, watermark_width, watermark_height, out_video_path)
res = os.system(text)
if res != 0:
self.no_watermark_list.append(video_path)
logger.error('ffmpeg處理單個影片水印失敗! 影片路徑:' + video_path)
return False
logger.info('ffmpeg處理單個影片水印成功! 影片路徑:' + video_path)
return True
except Exception as e:
logger.error('ffmpeg處理單個影片水印出現異常! 影片路徑:' + video_path + ";異常原因:" + str(e))
self.no_watermark_list.append(video_path)
return False 無錫婦科醫院哪家好
4. 使用tkinter構建圖形介面
該處程式碼不全,具體建立,可參考其他文章
self.OpenLabel = Label(self, text="影片路徑:")
self.OpenLabel.grid(row=0, column=0)
self.OpenEntry = Entry(self, textvariable=self.openVideoPath, width=45)
self.OpenEntry.grid(row=0, column=1)
self.OpenButton = Button(self, text="選擇影片路徑", command=self.selectOpenVideoPath)
self.OpenButton.grid(row=0, column=2)
self.OpenMarkLabel = Label(self, text="水印路徑:")
self.OpenMarkLabel.grid(row=1, column=0)
self.OpenMarkEntry = Entry(self, textvariable=self.openMarkPath, width=45)
self.OpenMarkEntry.grid(row=1, column=1)
self.OpenMarkButton = Button(self, text="選擇水印路徑", command=self.selectOpenMarkPath)
self.OpenMarkButton.grid(row=1, column=2)
5. 使用pyinstaller打包應用
安裝pyinstaller : pip install pyinstaller
進入python環境的Lib中找到pyinstaller,在該目錄下執行cmd,執行以下命令
pyinstaller.exe -D -w --add-binary C:\Users\wjz\Anaconda3\envs\spiderTest\Lib\site-packages\cv2\opencv_ffmpeg410_64.dll;. E:\video\pyexe.py
說明:
1)-D 指的是生成結果是一個目錄,各種第三方依賴、資源和exe同時儲存在該目錄
2)-w 指的是不生成黑視窗,直接顯示圖形化介面
3)–add-binary 後面是opencv的dll檔案路徑,如果不加可能生成的opencv版本出現問題
4)最後指定要打包的py檔案路徑
執行後會生成三個檔案build,dist,pyexe.spec(指定檔名),主程式pyexe.exe入口在dist資料夾中
找到exe檔案執行即可
6. 效果展示
影片路徑指需要處理水印的影片都放在該路徑下
水印路徑指需要處理水印的影片中出現的水印圖片都放在該路徑下
儲存影片路徑指經過程式處理後的影片都儲存在該路徑下
失敗影片路徑指處理中未成功的影片都儲存在該路徑下
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69945560/viewspace-2658182/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 002.02 Tkinter 圖形介面之文字範例
- pyinstaller打包cx_Oracle庫問題處理記錄Oracle
- java 圖片水印處理類Java
- 使用PyInstaller打包Python程式Python
- 使用pyinstaller打包exe檔案教程
- [Python GUI]Python內建圖形介面tkinter--入門1PythonGUI
- Java:實驗四 Java圖形介面與事件處理(頭歌)Java事件
- CGContextRef處理圓形圖片GCContext
- 使用PyInstaller打包檔案為exe程式
- 【python】打包神器--pyinstallerPython
- Python---pyinstaller打包Python
- 使用 pyinstaller 打包 py 檔案成 exe 程式
- python檔案打包利器之pyinstaller的使用Python
- Pyinstaller利用spec檔案打包的使用模板
- win10 ps 使用圖形處理器怎麼開啟_win10ps的圖形處理器在哪裡勾Win10
- 使用SCRT+XMING 圖形介面
- 26 使用者圖形介面
- pyinstaller_pytest.main_打包AI
- android簡單的圖形特效處理Android特效
- GPU 架構是圖形處理器GPU架構
- python3.6 使用pyinstaller 打包web程式的方法PythonWeb
- GO-圖形使用者介面Go
- JavaGUI——Java圖形使用者介面JavaGUI
- 23.圖形互動tkinter--menu
- 使用cors完成跨域請求處理CORS跨域
- PyInstaller打包Python程式為exePython
- [PY] PyQT 依賴 pyinstaller 打包QT
- android圖片處理,讓圖片變成圓形Android
- 圖形學之紋理後續/WebGL多紋理處理Web
- ae 2022圖形視訊處理軟體
- 在QlikView中使用Neo4j處理圖形資料AUView
- Tableau——資料前處理、折線圖、餅圖(環形圖)
- oracle客戶端安裝步驟—附圖形介面啟用失敗處理方法Oracle客戶端
- pyinstaller打包python成.exe檔案Python
- 圖形使用者介面1:初識Walk
- C#開發PACS醫學影像處理系統(十二):繪圖處理之圖形標記C#繪圖
- HitPaw Watermark Remover for Mac(圖片影片去水印工具)REMMac
- 圖形處理:給 Canvas 文字填充線性漸變Canvas