国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Python 基于 OpenCV 視覺圖像處理實(shí)戰(zhàn) 之 OpenCV 簡(jiǎn)單視頻處理實(shí)戰(zhàn)案例 之十一 簡(jiǎn)單給視頻添加水印圖片效果

這篇具有很好參考價(jià)值的文章主要介紹了Python 基于 OpenCV 視覺圖像處理實(shí)戰(zhàn) 之 OpenCV 簡(jiǎn)單視頻處理實(shí)戰(zhàn)案例 之十一 簡(jiǎn)單給視頻添加水印圖片效果。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

Python 基于 OpenCV 視覺圖像處理實(shí)戰(zhàn) 之 OpenCV 簡(jiǎn)單視頻處理實(shí)戰(zhàn)案例 之十一 簡(jiǎn)單給視頻添加水印圖片效果

目錄

Python 基于 OpenCV 視覺圖像處理實(shí)戰(zhàn) 之 OpenCV 簡(jiǎn)單視頻處理實(shí)戰(zhàn)案例 之十一 簡(jiǎn)單給視頻添加水印圖片效果

一、簡(jiǎn)單介紹

二、簡(jiǎn)單給視頻添加水印圖片效果實(shí)現(xiàn)原理

三、簡(jiǎn)單給視頻添加水印圖片效果案例實(shí)現(xiàn)簡(jiǎn)單步驟

四、注意事項(xiàng)


一、簡(jiǎn)單介紹

Python是一種跨平臺(tái)的計(jì)算機(jī)程序設(shè)計(jì)語(yǔ)言。是一種面向?qū)ο蟮膭?dòng)態(tài)類型語(yǔ)言,最初被設(shè)計(jì)用于編寫自動(dòng)化腳本(shell),隨著版本的不斷更新和語(yǔ)言新功能的添加,越多被用于獨(dú)立的、大型項(xiàng)目的開發(fā)。Python是一種解釋型腳本語(yǔ)言,可以應(yīng)用于以下領(lǐng)域: Web 和 Internet開發(fā)、科學(xué)計(jì)算和統(tǒng)計(jì)、人工智能、教育、桌面界面開發(fā)、軟件開發(fā)、后端開發(fā)、網(wǎng)絡(luò)爬蟲。

這里使用 Python? 基于 OpenCV 進(jìn)行視覺圖像處理,......

二、簡(jiǎn)單給視頻添加水印圖片效果實(shí)現(xiàn)原理

視頻水印是指在視頻內(nèi)容中添加圖像、文字或其他標(biāo)識(shí)符的技術(shù),以表明視頻的所有權(quán)、來(lái)源、版權(quán)信息或其他相關(guān)信息。視頻水印可以是透明的或半透明的,通常位于視頻畫面的角落或其他不影響主要內(nèi)容的位置。視頻水印可以用于保護(hù)視頻內(nèi)容的版權(quán),防止未經(jīng)授權(quán)的復(fù)制和使用,以及增加視頻的專業(yè)性和可識(shí)別性。

實(shí)現(xiàn)原理:

  1. 打開輸入視頻文件,并獲取其每一幀的大小。
  2. 打開水印圖像文件,并獲取其大小。
  3. 遍歷視頻的每一幀,將水印圖像疊加到視頻幀上。
  4. 根據(jù)指定的位置參數(shù)確定水印在視頻幀上的位置,并將水印圖像疊加到相應(yīng)的位置上。
  5. 將帶有水印的視頻幀寫入輸出視頻文件。

實(shí)現(xiàn)方法:

  1. 使用 OpenCV 的 VideoCapture 類打開輸入視頻文件,并讀取每一幀。
  2. 使用 OpenCV 的 VideoWriter 類創(chuàng)建輸出視頻文件,并指定視頻編碼器、幀率和大小。
  3. 使用 OpenCV 的 imread 函數(shù)讀取水印圖像。
  4. 遍歷視頻的每一幀,在每一幀上疊加水印圖像。
  5. 根據(jù)指定的位置參數(shù)確定水印的位置,并將水印圖像疊加到視頻幀的相應(yīng)位置上。
  6. 使用 OpenCV 的 addWeighted 函數(shù)將水印圖像疊加到視頻幀上,實(shí)現(xiàn)透明度疊加效果。
  7. 將帶有水印的視頻幀寫入輸出視頻文件。

涉及了一些關(guān)鍵函數(shù):

  1. cv2.VideoCapture(): 用于打開視頻文件并創(chuàng)建一個(gè)視頻捕獲對(duì)象。在這里,它被用于打開輸入視頻文件并創(chuàng)建一個(gè)用于讀取幀的視頻捕獲對(duì)象。

  2. cap.isOpened(): 用于檢查視頻是否成功打開。在這里,它被用于檢查輸入視頻文件是否成功打開。

  3. cap.read(): 用于讀取視頻的下一幀。在這里,它被用于循環(huán)遍歷視頻的每一幀并讀取幀內(nèi)容。

  4. cv2.VideoWriter(): 用于創(chuàng)建一個(gè)視頻寫入對(duì)象,可以將幀寫入視頻文件。在這里,它被用于創(chuàng)建一個(gè)用于寫入幀的視頻寫入對(duì)象。

  5. cv2.imread(): 用于讀取圖像文件。在這里,它被用于讀取水印圖像文件。

  6. cv2.imwrite(): 用于將圖像寫入文件。雖然在這里沒(méi)有直接使用,但可以用它來(lái)保存添加水印后的幀。

  7. cv2.putText(): 用于向圖像中添加文字。在這里,雖然沒(méi)有直接使用,但可以用它來(lái)添加文字水印。

  8. cv2.addWeighted(): 用于將兩個(gè)圖像進(jìn)行加權(quán)疊加。在這里,它被用于將水印圖像疊加到視頻幀上。

  9. cap.release(): 用于釋放視頻捕獲對(duì)象的資源。

  10. out.release(): 用于釋放視頻寫入對(duì)象的資源。

  11. cv2.destroyAllWindows(): 用于關(guān)閉所有窗口,通常在程序結(jié)束時(shí)調(diào)用。

三、簡(jiǎn)單給視頻添加水印圖片效果案例實(shí)現(xiàn)簡(jiǎn)單步驟

1、編寫代碼

Python 基于 OpenCV 視覺圖像處理實(shí)戰(zhàn) 之 OpenCV 簡(jiǎn)單視頻處理實(shí)戰(zhàn)案例 之十一 簡(jiǎn)單給視頻添加水印圖片效果,Python OpenCV 實(shí)戰(zhàn)案例-圖片/視頻/人臉等使用,python,opencv,圖像處理,水印,視頻處理

2、運(yùn)行效果

Python 基于 OpenCV 視覺圖像處理實(shí)戰(zhàn) 之 OpenCV 簡(jiǎn)單視頻處理實(shí)戰(zhàn)案例 之十一 簡(jiǎn)單給視頻添加水印圖片效果,Python OpenCV 實(shí)戰(zhàn)案例-圖片/視頻/人臉等使用,python,opencv,圖像處理,水印,視頻處理

3、具體代碼文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-857540.html

"""
簡(jiǎn)單給視頻添加水印圖片效果
    1、打開輸入視頻文件,并獲取其每一幀的大小。
    2、打開水印圖像文件,并獲取其大小。
    3、遍歷視頻的每一幀,將水印圖像疊加到視頻幀上。
    4、根據(jù)指定的位置參數(shù)確定水印在視頻幀上的位置,并將水印圖像疊加到相應(yīng)的位置上。
    5、將帶有水印的視頻幀寫入輸出視頻文件。
"""

import cv2
import os


def add_watermark_to_video(input_video_path, output_video_path, watermark_image_path, alpha=1.0,
                           position='bottom-right'):
    """
    簡(jiǎn)單給視頻添加水印圖片效果
    :param input_video_path: 原視頻路徑
    :param output_video_path: 添加水印后保存視頻路徑
    :param watermark_image_path: 水印圖片路徑
    :param alpha: 控制水印整體透明度的參數(shù),范圍為 0 到 1
    :param position: 控制水印位置的參數(shù),可選值包括 'top-left', 'top-right', 'bottom-left', 'center', 'bottom-right'
    :return:
    """
    # 檢查輸入視頻文件是否存在
    if not os.path.isfile(input_video_path):
        print("Error: Input video file does not exist.")
        return

    # 檢查水印圖像文件是否存在
    if not os.path.isfile(watermark_image_path):
        print("Error: Watermark image file does not exist.")
        return

    # 打開視頻文件
    cap = cv2.VideoCapture(input_video_path)

    # 檢查視頻是否成功打開
    if not cap.isOpened():
        print("Error: Failed to open input video.")
        return

    # 獲取視頻的寬度和高度
    width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))
    height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))

    # 創(chuàng)建VideoWriter對(duì)象用于寫入輸出視頻
    fourcc = cv2.VideoWriter_fourcc(*'mp4v')
    out = cv2.VideoWriter(output_video_path, fourcc, 30.0, (width, height))

    # 讀取水印圖像
    watermark = cv2.imread(watermark_image_path, cv2.IMREAD_UNCHANGED)

    # 檢查水印圖像是否成功讀取
    if watermark is None:
        print("Error: Failed to read watermark image.")
        return

    # 檢查水印圖像的透明度通道是否存在
    if watermark.shape[2] < 4:
        print("Error: Watermark image does not have an alpha channel.")
        return

    # 循環(huán)遍歷視頻的每一幀
    while True:
        ret, frame = cap.read()
        if not ret:
            break

        # 將水印疊加到當(dāng)前幀上
        overlay = frame.copy()
        h, w = watermark.shape[:2]

        # 根據(jù)位置參數(shù)確定水印的位置
        if position == 'top-left':
            x_offset, y_offset = 10, 10
        elif position == 'top-right':
            x_offset, y_offset = width - w - 10, 10
        elif position == 'bottom-left':
            x_offset, y_offset = 10, height - h - 10
        elif position == 'center':
            x_offset, y_offset = (width - w) // 2, (height - h) // 2
        else:  # 默認(rèn)為 'bottom-right'
            x_offset, y_offset = width - w - 10, height - h - 10

        for c in range(0, 3):
            overlay[y_offset:y_offset + h, x_offset:x_offset + w, c] = \
                watermark[:, :, c] * (watermark[:, :, 3] / 255.0 * alpha) + frame[y_offset:y_offset + h,
                                                                            x_offset:x_offset + w, c] * (
                        1.0 - watermark[:, :, 3] / 255.0 * alpha)

        # 將幀寫入輸出視頻
        out.write(overlay)

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


def main():
    # 調(diào)用函數(shù)并指定輸入和輸出視頻文件路徑以及水印圖像路徑
    input_video_path = "Videos/CatRun.mp4"
    output_video_path = "Videos/CatRun_Wartermark.mp4"
    watermark_image_path = "Images/Watermark.png"
    alpha = 0.5  # 控制水印整體透明度的參數(shù),范圍為 0 到 1
    position = 'top-right'  # 控制水印位置的參數(shù),可選值包括 'top-left', 'top-right', 'bottom-left', 'center', 'bottom-right'

    # 執(zhí)行函數(shù)
    add_watermark_to_video(input_video_path, output_video_path, watermark_image_path, alpha, position)


if __name__ == "__main__":
    main()

四、注意事項(xiàng)

  1. 參數(shù)安全性:對(duì)于輸入的參數(shù),需要進(jìn)行安全校驗(yàn),以確保輸入的參數(shù)值在有效范圍內(nèi),避免出現(xiàn)錯(cuò)誤。
  2. 圖像大小匹配:確保水印圖像的大小與視頻幀的大小匹配,否則可能導(dǎo)致疊加時(shí)的錯(cuò)誤。
  3. 透明度處理:根據(jù)水印圖像的透明度信息,合理處理水印圖像與視頻幀的疊加透明度,以保持水印的透明效果。
  4. 位置處理:根據(jù)指定的位置參數(shù),確保水印圖像疊加到視頻幀的正確位置上,避免覆蓋重要信息或者顯示不完整。
  5. 資源釋放:在處理完所有幀之后,及時(shí)釋放視頻讀取和寫入的資源,以避免內(nèi)存泄漏或資源浪費(fèi)。

到了這里,關(guān)于Python 基于 OpenCV 視覺圖像處理實(shí)戰(zhàn) 之 OpenCV 簡(jiǎn)單視頻處理實(shí)戰(zhàn)案例 之十一 簡(jiǎn)單給視頻添加水印圖片效果的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包