最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

使用Python和OpenCV實(shí)現(xiàn)動(dòng)態(tài)背景的畫(huà)中畫(huà)效果

 更新時(shí)間:2024年11月20日 10:59:53   作者:黑金IT  
這篇文章將通過(guò)一個(gè)詳細(xì)的Python腳本,使用OpenCV庫(kù)來(lái)為視頻添加動(dòng)態(tài)背景,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下

在本文中,我們將通過(guò)一個(gè)詳細(xì)的Python腳本,使用OpenCV庫(kù)來(lái)為視頻添加動(dòng)態(tài)背景。這個(gè)腳本將指導(dǎo)你如何讀取兩個(gè)視頻文件,一個(gè)作為前景,另一個(gè)作為背景,并將它們合成一個(gè)視頻,其中前景視頻的特定區(qū)域?qū)@示背景視頻的內(nèi)容。

在視頻上加入背景動(dòng)態(tài)的畫(huà)中畫(huà)。

代碼解析與注釋

# 視頻文件路徑
input_video_path = 'sc/input_video.mp4'  # 輸入視頻文件路徑
output_video_path = 'output_video_bg03.mp4'  # 輸出視頻文件路徑
background_video_path = 'sc/bg_03b.mp4'  # MP4視頻背景文件路徑

# 背景透明度(0.0 完全透明,1.0 完全不透明)
background_opacity = 0.6

# 背景視頻的最大幀數(shù)(如果需要截?cái)啾尘耙曨l)
max_background_frames = 1000

# 讀取視頻文件
cap = cv2.VideoCapture(input_video_path)  # 讀取前景視頻
background_cap = cv2.VideoCapture(background_video_path)  # 讀取背景視頻

# 獲取視頻幀的尺寸
ret, frame = cap.read()  # 讀取第一幀
if not ret:
    print("無(wú)法讀取視頻文件")
    raise Exception("無(wú)法讀取視頻文件")  # 如果無(wú)法讀取,拋出異常

height, width = frame.shape[:2]  # 獲取幀的高和寬

# 定義黑色實(shí)心矩形的尺寸變量
top_bar_height = int(height * 0.30)  # 頂部黑色實(shí)心矩形的高度設(shè)置為視頻總高度的30%
bottom_bar_height = int(height * 0.15)  # 底部黑色實(shí)心矩形的高度設(shè)置為視頻總高度的15%

# 定義蒙版的位置和大小
mask_top_margin = top_bar_height  # 蒙版頂部距離
mask_bottom_margin = bottom_bar_height  # 蒙版底部距離
mask_height = height - mask_top_margin - mask_bottom_margin  # 蒙版高度
mask_width = width  # 蒙版寬度
mask_x = 0  # 蒙版中心x坐標(biāo)
mask_y = mask_top_margin  # 蒙版中心y坐標(biāo)

# 創(chuàng)建蒙版
mask = np.zeros((height, width, 3), dtype=np.uint8)  # 創(chuàng)建一個(gè)全黑的蒙版
cv2.rectangle(mask, (mask_x, mask_y), (mask_x + mask_width, mask_y + mask_height), (255, 255, 255), -1)  # 在蒙版中繪制一個(gè)白色矩形

# 定義視頻寫(xiě)入器
fourcc = cv2.VideoWriter_fourcc(*'mp4v')  # 定義視頻編碼格式
out = cv2.VideoWriter(output_video_path, fourcc, 20.0, (width, height))  # 創(chuàng)建視頻寫(xiě)入對(duì)象

# 背景視頻幀計(jì)數(shù)器
background_frame_index = 0

# 遍歷視頻幀
while cap.isOpened():
    ret, frame = cap.read()  # 讀取前景視頻的當(dāng)前幀
    if not ret:
        break  # 如果讀取結(jié)束,跳出循環(huán)

    # 在視頻幀頂部繪制黑色實(shí)心矩形
    cv2.rectangle(frame, (0, 0), (width, top_bar_height), (0, 0, 0), -1)
    # 在視頻幀底部繪制黑色實(shí)心矩形
    cv2.rectangle(frame, (0, height - bottom_bar_height), (width, height), (0, 0, 0), -1)
    # 將蒙版應(yīng)用到幀上
    masked_frame = cv2.bitwise_and(frame, mask)
    # 讀取背景視頻的當(dāng)前幀
    background_ret, background_frame = background_cap.read()
    if not background_ret or background_frame_index >= max_background_frames:
        # 如果背景視頻讀取失敗或達(dá)到最大幀數(shù),重新開(kāi)始背景視頻
        background_cap.set(cv2.CAP_PROP_POS_FRAMES, 0)
        background_frame_index = 0
        background_ret, background_frame = background_cap.read()

    # 確保背景幀的尺寸與視頻幀匹配
    background_frame = cv2.resize(background_frame, (width, height))
    # 調(diào)整背景幀的透明度
    background_frame = background_frame.astype(float) * background_opacity
    background_frame = np.clip(background_frame, 0, 255).astype(np.uint8)

    # 創(chuàng)建反向蒙版
    inv_mask = cv2.bitwise_not(mask)
    # 將背景幀與蒙版的反向進(jìn)行混合
    masked_background = cv2.bitwise_and(background_frame, inv_mask)
    # 將兩個(gè)混合結(jié)果相加
    result_frame = cv2.add(masked_frame, masked_background)
    # 保存幀
    out.write(result_frame)
    # 更新背景視頻幀索引
    background_frame_index += 1

# 釋放資源
cap.release()
background_cap.release()
out.release()
cv2.destroyAllWindows()

注意

以上是通過(guò)cv2經(jīng)測(cè)式,如何視頻文件大于10M時(shí)運(yùn)行較慢。

結(jié)尾與思考

通過(guò)上述代碼,我們成功地為一個(gè)視頻添加了動(dòng)態(tài)背景,同時(shí)在視頻的頂部和底部添加了黑色實(shí)心矩形。這個(gè)技術(shù)可以廣泛應(yīng)用于視頻編輯和特效制作中,例如制作新聞節(jié)目的背景、電影特效或者增強(qiáng)視頻的視覺(jué)效果。

這個(gè)項(xiàng)目也展示了Python和OpenCV在視頻處理方面的強(qiáng)大能力。通過(guò)簡(jiǎn)單的代碼,我們就能夠?qū)崿F(xiàn)復(fù)雜的視頻合成效果。這不僅為視頻制作人員提供了便利,也為愛(ài)好者提供了一個(gè)學(xué)習(xí)和實(shí)驗(yàn)的平臺(tái)。

在未來(lái),我們可以探索更多的視頻處理技術(shù),比如使用深度學(xué)習(xí)來(lái)自動(dòng)替換視頻中的背景,或者開(kāi)發(fā)更復(fù)雜的特效來(lái)增強(qiáng)視頻內(nèi)容。隨著技術(shù)的不斷進(jìn)步,視頻處理的邊界也在不斷擴(kuò)展,為我們提供了無(wú)限的可能性。

到此這篇關(guān)于使用Python和OpenCV實(shí)現(xiàn)動(dòng)態(tài)背景的畫(huà)中畫(huà)效果的文章就介紹到這了,更多相關(guān)Python OpenCV動(dòng)態(tài)背景內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • python能做什么 python的含義

    python能做什么 python的含義

    在本篇文章里小編給大家整理的是關(guān)于python能做什么 python的含義的相關(guān)知識(shí)點(diǎn),有需要的朋友們學(xué)習(xí)下。
    2019-10-10
  • 基于Python的微信機(jī)器人開(kāi)發(fā) 微信登錄和獲取好友列表實(shí)現(xiàn)解析

    基于Python的微信機(jī)器人開(kāi)發(fā) 微信登錄和獲取好友列表實(shí)現(xiàn)解析

    這篇文章主要介紹了Python微信機(jī)器人開(kāi)發(fā) 微信登錄和獲取好友列表實(shí)現(xiàn)解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-08-08
  • 簡(jiǎn)單談?wù)凱ython面向?qū)ο蟮南嚓P(guān)知識(shí)

    簡(jiǎn)單談?wù)凱ython面向?qū)ο蟮南嚓P(guān)知識(shí)

    由于馬上就要期末考試了,正在抓緊時(shí)間復(fù)習(xí) 所以這一篇就拖了很久,抱歉啦~ 今天會(huì)說(shuō)說(shuō): 屬性私有,方法私有,重寫(xiě),魔術(shù)方法,需要的朋友可以參考下
    2021-01-01
  • python+playwright在線安裝和離線安裝詳細(xì)教程

    python+playwright在線安裝和離線安裝詳細(xì)教程

    Playwright是微軟在2020年初開(kāi)源自動(dòng)化測(cè)試工具,功能和selenium類(lèi)似,都可以驅(qū)動(dòng)瀏覽器進(jìn)行各種自動(dòng)化操作,這篇文章主要介紹了python+playwright在線安裝和離線安裝的相關(guān)資料,需要的朋友可以參考下
    2019-01-01
  • 基于Python的Houdini插件開(kāi)發(fā)過(guò)程詳情

    基于Python的Houdini插件開(kāi)發(fā)過(guò)程詳情

    這篇文章主要介紹了基于Python的Houdini插件開(kāi)發(fā)過(guò)程詳情,Houdini是基于QT進(jìn)行的開(kāi)發(fā),支持?Python、HScript二種腳本進(jìn)行插件開(kāi)發(fā),下面文章介紹內(nèi)容,需要的朋友可以參考一下
    2022-02-02
  • 用Python自動(dòng)清理電腦內(nèi)重復(fù)文件,只要10行代碼(自動(dòng)腳本)

    用Python自動(dòng)清理電腦內(nèi)重復(fù)文件,只要10行代碼(自動(dòng)腳本)

    這篇文章主要介紹了用Python自動(dòng)清理電腦內(nèi)重復(fù)文件,只要10行代碼,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-01-01
  • Python+Tkinter制作在線個(gè)性簽名工具

    Python+Tkinter制作在線個(gè)性簽名工具

    這篇文章主要為大家分享如何利用Python中的Tkinter庫(kù)制作一個(gè)簡(jiǎn)易的在線個(gè)性簽名生成工具,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解一下
    2022-03-03
  • Pandas時(shí)間類(lèi)型轉(zhuǎn)換與處理的實(shí)現(xiàn)示例

    Pandas時(shí)間類(lèi)型轉(zhuǎn)換與處理的實(shí)現(xiàn)示例

    本文主要介紹了Pandas時(shí)間類(lèi)型轉(zhuǎn)換與處理的實(shí)現(xiàn)示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-07-07
  • C3 線性化算法與 MRO之Python中的多繼承

    C3 線性化算法與 MRO之Python中的多繼承

    Python 中的方法解析順序(Method Resolution Order, MRO)定義了多繼承存在時(shí) Python 解釋器查找函數(shù)解析的正確方式。這篇文章給大家介紹了Python中的多繼承,感興趣的朋友一起看看吧
    2021-10-10
  • Python基礎(chǔ)之元編程知識(shí)總結(jié)

    Python基礎(chǔ)之元編程知識(shí)總結(jié)

    很多人不理解“元編程”是個(gè)什么東西,關(guān)于它也沒(méi)有一個(gè)十分準(zhǔn)確的定義.這篇文章要說(shuō)的是Python里的元編程,實(shí)際上也不一定就真的符合“元編程”的定義.只不過(guò)我無(wú)法找到一個(gè)更準(zhǔn)確的名字來(lái)代表這篇文章的主題,所以就借了這么一個(gè)名號(hào),需要的朋友可以參考下
    2021-05-05

最新評(píng)論

寿阳县| 石渠县| 德格县| 阿瓦提县| 泌阳县| 常宁市| 驻马店市| 龙南县| 通州市| 凤阳县| 图们市| 保德县| 吐鲁番市| 梁河县| 定结县| 临夏市| 双峰县| 蒙城县| 馆陶县| 若尔盖县| 玉山县| 北辰区| 沾益县| 赤壁市| 石楼县| 贵州省| 双辽市| 武胜县| 永春县| 正宁县| 密山市| 凭祥市| 清河县| 蕲春县| 曲水县| 永修县| 安图县| 社旗县| 安国市| 兴国县| 老河口市|