本文目錄一覽:
- 1、python OpenCV視頻拆分圖片代碼
- 2、如何用python實現視頻關鍵幀提取並保存為圖片
- 3、如何用編程生成視頻文件
- 4、使用OpenCV和Python進行圖像拼接
- 5、爆肝!用Python製作抖音爆款視頻!
- 6、Python如何上傳本地視頻?
python OpenCV視頻拆分圖片代碼
# coding:utf-8
import cv2
import numpy as np
import os
print(“1”)
vc = cv2.VideoCapture(“123.mp4”)
C = 1
print(“2”)
if vc.isOpened():
rVal, frame = vc.read()
else:
print(“3”)
rVal = False
while rVal:
print(C)
if C % 1000 == 0: # every 5 fps write frame to img
path=’./image/’+str(C)+’.jpg’
cv2.imwrite(path, frame)
# cropped001 = frame2[0:300,300:600] #y change from 0 to 300 x change from 300 to 600
# cv2.im write(‘./cropped/’+str(c)+’001.jpg’,cropped001)
print(C)
cv2.waitKey(1)
C = C + 1
vc.release()
如何用python實現視頻關鍵幀提取並保存為圖片
import cv2
vc = cv2.VideoCapture(‘Test.avi’) #讀入視頻文件
c=1
if vc.isOpened(): #判斷是否正常打開
rval , frame = vc.read()
else:
rval = False
timeF = 1000 #視頻幀計數間隔頻率
while rval: #循環讀取視頻幀
rval, frame = vc.read()
if(c%timeF == 0): #每隔timeF幀進行存儲操作
cv2.imwrite(‘image/’+str(c) + ‘.jpg’,frame) #存儲為圖像
c = c + 1
cv2.waitKey(1)
vc.release()
如何用編程生成視頻文件
恕我愚鈍,兄弟,「不藉助控制項,只提供若干圖片資源」,通過寫代碼編程序做一個avi格式的視頻,這不是電影膠片的放映原理嗎?這樣的程序蓋茨尚且難以做出,並且也沒有作出。有點異想天開了吧。
使用OpenCV和Python進行圖像拼接
么是圖像拼接呢?簡單來說,對於輸入應該有一組圖像,輸出是合成圖像。同時,必須保留圖像之間的邏輯流。
首先讓我們了解圖像拼接的概念。基本上,如果你想捕捉一個大的場景,你的相機只能提供一個特定解析度的圖像(如:640×480),這當然不足以捕捉大的全景。所以,我們可以做的是捕捉整個場景的多個圖像,然後把所有的碎片放在一起,形成一個大的圖像。這些有序的照片被稱為全景。獲取多幅圖像並將其轉換成全景圖的整個過程稱為圖像拼接。
首先,需要安裝opencv 3.4.2.16。
接下來我們將導入我們將在Python代碼中使用的庫:
在我們的教程中,我們將拍攝這張精美的照片,我們會將其分成兩張左右兩張照片,然後我們會嘗試拍攝相同或非常相似的照片。
因此,我將此圖像切成兩個圖像,它們會有某種重疊區域:
在此,我們將列出我們應採取的步驟,以取得最終的結果:
因此,從第一步開始,我們將導入這兩個圖像並將它們轉換為灰度,如果您使用的是大圖像,我建議您使用cv2.resize,因為如果您使用較舊的計算機,它可能會非常慢並且需要很長時間。如果要調整圖像大小,即調整50%,只需將fx = 1更改為fx = 0.5即可。
我們還需要找出兩幅圖像中匹配的特徵。我們將使用opencv_contrib的SIFT描述符。SIFT (Scale constant Feature Transform)是一種非常強大的OpenCV演算法。這些最匹配的特徵作為拼接的基礎。我們提取兩幅圖像的關鍵點和sift描述符如下:
kp1和kp2是關鍵點,des1和des2是圖像的描述符。如果我們用特徵來畫這幅圖,它會是這樣的:
左邊的圖像顯示實際圖像。右側的圖像使用SIFT檢測到的特徵進行注釋:
一旦你有了兩個圖像的描述符和關鍵點,我們就會發現它們之間的對應關係。我們為什麼要這麼做?為了將任意兩個圖像連接成一個更大的圖像,我們必須找到重疊的點。這些重疊的點會讓我們根據第一幅圖像了解第二幅圖像的方向。根據這些公共點,我們就能知道第二幅圖像是大是小還是旋轉後重疊,或者縮小/放大後再fitted。所有此類信息的產生是通過建立對應關係來實現的。這個過程稱為registration。
對於匹配圖像,可以使用opencv提供的FLANN或BFMatcher方法。我會寫兩個例子證明我們會得到相同的結果。兩個示例都匹配兩張照片中更相似的特徵。當我們設置參數k = 2時,這樣我們就要求knnMatcher為每個描述符給出2個最佳匹配。「matches」是列表的列表,其中每個子列表由「k」個對象組成。以下是Python代碼:
FLANN匹配代碼:
BFMatcher匹配代碼:
通常在圖像中,圖像的許多地方可能存在許多特徵。所以我們過濾掉所有的匹配來得到最好的。因此我們使用上面得到的前2個匹配項進行比值檢驗。如果下面定義的比值大於指定的比值,則考慮匹配。
現在我們定義在圖像上繪製線條的參數,並給出輸出以查看當我們在圖像上找到所有匹配時的樣子:
這是輸出的匹配圖像:
這部分完整Python代碼:
因此,一旦我們獲得了圖像之間的最佳匹配,我們的下一步就是計算單應矩陣。如前所述,單應矩陣將與最佳匹配點一起使用,以估計兩個圖像內的相對方向變換。
在OpenCV中估計單應性是一項簡單的任務,只需一行代碼:
在開始編碼拼接演算法之前,我們需要交換圖像輸入。所以img_現在會取右圖像img會取左圖像。
那麼讓我們進入拼接編碼:
因此,首先,我們將最小匹配條件count設置為10(由MIN_MATCH_COUNT定義),並且只有在匹配良好的匹配超出所需匹配時才進行拼接。否則,只需顯示一條消息,說明匹配不夠。
因此,在if語句中,我們將關鍵點(從匹配列表)轉換為findHomography()函數的參數。
只需在這段代碼中討論cv2.imshow(「original_image_overlapping.jpg」,img2),我們就會顯示我們收到的圖像重疊區域:
因此,一旦我們建立了單應性,我們需要扭曲視角,我們將以下單應矩陣應用於圖像:
所以我們使用如下:
在上面兩行Python代碼中,我們從兩個給定的圖像中獲取重疊區域。然後在「dst」中我們只接收到沒有重疊的圖像的右側,因此在第二行代碼中我們將左側圖像放置到最終圖像。所以在這一點上我們完全拼接了圖像:
剩下的就是去除圖像的黑色,所以我們將編寫以下代碼來從所有圖像邊框中刪除黑邊:
這是我們調用修剪邊界的最終定義函數,同時我們在屏幕上顯示該圖像。如果您願意,也可以將其寫入磁碟:
使用上面的Python代碼,我們將首先收到原始圖片:
這是完整的最終代碼:
在本教程中,我們學習了如何使用OpenCV執行圖像拼接和全景構造,並編寫了最終的圖像拼接代碼。
我們的圖像拼接演算法需要四個主要步驟:檢測關鍵點和提取局部不變描述符; 獲得圖像之間的匹配描述符; 應用RANSAC估計單應矩陣; 使用單應矩陣應用warping transformation。
當僅為兩個圖像構建全景圖時,該演算法在實踐中工作良好。
爆肝!用Python製作抖音爆款視頻!
前幾天我在抖音上刷到一個慢慢變老的視頻,播放量居然有 30W+,當時就在想這視頻 Python 可不可以做?經過一番搜索,我找到了騰訊雲的人臉年齡變化 API,上面介紹說只要用戶上傳一張人臉圖片,基於人臉編輯與生成演算法,就可以輸出一張人臉變老或變年輕的圖片,並支持實現人臉不同年齡的變化。
第一步,在註冊賬號之後,打開 API 密鑰管理頁面( )獲取到 SecretId 和 SecretKey。
第二步,安裝騰訊雲的 SDK
在人臉年齡變化 API 中有一個 AgeInfo 參數,它包含了 Age 和 FaceRect 兩個屬性,其中 FaceRect 屬性必須填人臉在照片中基於左上角的 X、Y 坐標和人臉的高度與寬度。所以先要調用人臉檢測與分析 API 得到這些數據。
下面的示例圖是在百度圖片中截取的。
示例結果
在上面已經得到了各個人臉的 X、Y、Width、Height 屬性,加上變老的年齡 Age,就可以請求年齡變化 API 了。
這裡需要注意的是 models 模塊,人臉檢測 models 模塊是在 tencentcloud.iai.v20200303 包下,人臉年齡變化的 models 是在 tencentcloud.ft.v20200304 下,兩個 models 模塊並不兼容。
示例結果
最後的視頻可以將圖片一張一張插入 PPT 幻燈片,點擊保存為視頻。
用 Python 製作抖音素材,下一個 30W+ 播放量等著你。
Python如何上傳本地視頻?
參考代碼如下:
from tkinter import *
from tkinter.ttk import *
from tkinter.filedialog import askopenfile
import time
ws = Tk()
ws.title(‘PythonGuides’)
ws.geometry(‘400×200’)
def open_file():
file_path = askopenfile(mode=’r’, filetypes=[(‘Vedio Files’, ‘*mp4’)])
if file_path is not None:
pass
def uploadFiles():
pb1 = Progressbar(
ws,
orient=HORIZONTAL,
length=300,
mode=’determinate’
)
pb1.grid(row=4, columnspan=3, pady=20)
for i in range(5):
ws.update_idletasks()
pb1[‘value’] += 20
time.sleep(1)
pb1.destroy()
Label(ws, text=’File Uploaded Successfully!’, foreground=’green’).grid(row=4, columnspan=3, pady=10)
adhar = Label(
ws,
text=’Upload Government id in jpg format ‘
)
adhar.grid(row=0, column=0, padx=10)
adharbtn = Button(
ws,
text =’Choose File’,
command = lambda:open_file()
)
adharbtn.grid(row=0, column=1)
dl = Label(
ws,
text=’Upload Driving License in jpg format ‘
)
dl.grid(row=1, column=0, padx=10)
dlbtn = Button(
ws,
text =’Choose File ‘,
command = lambda:open_file()
)
dlbtn.grid(row=1, column=1)
ms = Label(
ws,
text=’Upload Marksheet in jpg format ‘
)
ms.grid(row=2, column=0, padx=10)
msbtn = Button(
ws,
text =’Choose File’,
command = lambda:open_file()
)
msbtn.grid(row=2, column=1)
upld = Button(
ws,
text=’Upload Files’,
command=uploadFiles
)
upld.grid(row=3, columnspan=3, pady=10)
ws.mainloop()
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/227652.html