1. 程式人生 > >Python opencv:實現與自己同框對話的視訊特效

Python opencv:實現與自己同框對話的視訊特效

做視訊特效時常用一種畫面拼接的手法,可以實現在一個場景中同一個人與自己同框做出不同動作的效果。

我們知道,從視訊到影象,從影象到畫素,這一層層深入下來,我們只要能操縱每一個畫素點的值,就可以實現任意想要的移花接木效果。

下面,來嘗試使用Python+opencv實現自己與自己同框的視訊特效。

一、素材準備

要求同一個主體(人或動物、物體均可)在同一場景的不同位置拍攝兩段視訊。為了方便後切裁切,最好在鏡頭左端面向右端拍攝一段,然後在鏡頭右端面向左端拍另外一段。

二、特效處理思路

  1. 分別讀取兩個視訊中的影象幀;
  2. 兩幀影象分別進行裁切,分別保留每段視訊的主體,切記在拼接的位置(左視訊從右端拼接,右視訊從左端拼接)對主體本身做了切割,這樣效果出來很差;
  3. 將裁切好的兩幀影象進行拼接,並調整了影象亮度,調整方法為:先將影象從BGR模式轉為HSV模式,調節V(明度)值後,再轉回BGR;
  4. 在指定幀上新增文字。

三、程式碼

# -*- coding: utf-8 -*-
"""
Created on Tue Sep 11 11:24:11 2018

@author: Leon

內容:
影象的處理與拼接

"""
import numpy as np 
import cv2
from PIL import Image,ImageDraw,ImageFont

fourcc = cv2.VideoWriter_fourcc(*'XVID')
out = cv2.VideoWriter('output.MP4',fourcc, 20.0, (640,480))

cv2.namedWindow("test")
# 獲取視訊素材:這裡讀取的是你提前準備好的兩段視訊
video = cv2.VideoCapture('org.MP4',0)
video2 = cv2.VideoCapture('org2.MP4',0)

def CH_WordDraw(img,text,size,x,y,r,g,b):
    # 新增中文函式:在原圖上新增中文
    img_rbg = cv2.cvtColor(img,cv2.COLOR_BGR2RGB)
    img_PIL = Image.fromarray(img_rbg)
    draw = ImageDraw.Draw(img_PIL)
    font = ImageFont.truetype('simhei.ttf',size,encoding='utf-8')
    draw.text((x,y),text,(r,g,b),font=font)
    return cv2.cvtColor(np.array(img_PIL),cv2.COLOR_RGB2BGR)
    
kk=0
while video.isOpened()&video2.isOpened():

    _,frame = video.read()
    _2,frame2 = video2.read()
    kk=kk+1
    if not (_2&_):
        break
    
    frame = cv2.cvtColor(frame,cv2.COLOR_BGR2HSV)
    frame2 = cv2.cvtColor(frame2,cv2.COLOR_BGR2HSV)

    frame[:,:,2] = frame[:,:,2]-3
    frame = cv2.cvtColor(frame,cv2.COLOR_HSV2BGR)
    frame2 = cv2.cvtColor(frame2,cv2.COLOR_HSV2BGR)

    img_video = frame[:,0:int(frame.shape[1]/2),:]
    img_video2 = frame2[:,int(frame2.shape[1]/2):,:]
    if kk>50:
        img_video = CH_WordDraw(img_video,'你是不是傻?',40,70,50,222,0,0)
    if kk >90:
        img_video2 = CH_WordDraw(img_video2,'······',40,50,100,222,0,0)
    img_out = np.hstack((img_video,img_video2))
cv2.adaptiveThreshold(frame,255,cv2.ADAPTIVE_THRESH_GAUSSIAN_C,cv2.THRESH_BINARY,11,0)
    
    cv2.imshow("test",img_out)
    if cv2.waitKey(5)&0xFF==ord('q'):
        break
    # 儲存視訊
    out.write(img_out)

#釋放相關資源
video.release()
video2.release()
out.release()
cv2.destroyAllWindows()

PS:關於如何使兩個視訊拼接邊緣平滑過渡,我尚未進行深入研究,如果有懂這方面的朋友,也麻煩在評論區留言,不勝感激!

相關推薦

Python opencv實現自己對話視訊特效

做視訊特效時常用一種畫面拼接的手法,可以實現在一個場景中同一個人與自己同框做出不同動作的效果。 我們知道,從視訊到影象,從影象到畫素,這一層層深入下來,我們只要能操縱每一個畫素點的值,就可以實現任意想要的移花接木效果。 下面,來嘗試使用Python+opencv實現自己與

python 語法實現佇列

學資料結構的時候,用c語言實現棧與佇列可不容易。用python只要幾行程式碼就可以了,基於列表實現棧,基於雙端列表實現佇列。 棧(後進先出) stack = [1, 2, 3, 4] stack.append(5) # 入棧 stack.pop() # 出棧 佇列(先進先

Python+OpenCV+mss實現區域網跨平臺桌面演示

整體思路 server.py:用mss截圖,然後zlib壓縮後socket傳送 client:socket接收,zlib解壓縮,然後使用OpenCV播放 簡單介紹mss An ultra fast cross-platform multiple screenshots modul

Python基礎extendappend的區別

extend與append方法的相似之處在於都是將新接收到引數放置到已有列表的後面。而extend方法只能接收list,且把這個list中的每個元素新增到原list中。 而append方法可以接收任意資料型別的引數,並且簡單地追加到list尾部。 例: a = [(1,2,3)] b =

OpenCV MatIplImage*間的相互轉換

1. Mat -->IplImage Mat mat_img=imread("samples.bmp"); IplImage* ipl_img; ipl_img = &IplImage(mat_img); 2. IplImage--->Mat IplImage*

Python解惑TrueFalse

Python 中常用的資料型別bool(布林)型別的例項物件(值)就兩個,真和假,分別用True和False表示。在if 條件判斷和while 語句中經常用到,不過在Python2.x 中,True 和False 卻有著奇怪的用法,就是真假可以相互被替換,先看下面程式碼: >>

Python程式解決豬雞籠問題

''' 該問題類似於雞兔同籠問題,輸入腿和頭的個數,計算豬和雞的個數,採用窮舉法解決該問題。該問題來源於MIT計算機導論課程。 ''' def calculate(n_heads,n_legs): for n_chicks in range(0,n_heads+1)

python學習變數字串

counter = 100 # 賦值整型變數 miles = 1000.0 # 浮點型 name = "John" # 字串 print counter print miles print name 以上例項中,100,1000.0和"John"分別賦值給counter,miles

python練習實現一個整數數組裡面兩個數之和為183的所有整數對

1 l1 = [183,0,1,2,-184,367] 2 3 num = [] 4 5 for i in range (0,len(l1)): 6 7 for l in range (i+1,len(l1)): 8 9 if l1[i]+l1[l]==

Python指令碼實現資料庫匯出資料到excel表格,支援mysql,postergrsql,MongoDB

import xlwt #返回需要匯出的物件的集合,根據業務字型實現 def getObjList(): return [] # 制定 表格行 和資料庫欄位的對應 obj_feild = { 0: 'name', # 表格第一行是名字 1: 'age'

Python+opencv+pyaudio實現帶聲音螢幕錄製

文章目錄 聲音錄製 視訊錄製(無聲音) 錄製的音訊與視訊合成為帶聲音的視訊 基於個人的愛好和現實的需求,決定用Python做一個螢幕錄製的指令碼。因為要看一些加密的視訊,每次都要登入,特別麻煩,遂決定用自己寫的指令碼,將加密視訊的播放過程全程錄

Python+OpenCV實現檢測場景內是否有物體移動,並進行人臉檢測抓拍

可以當個家庭安防用吧0.0 import cv2 import time save_path = './face/' face_cascade = cv2.CascadeClassifier('./cascades/haarcascade_front

Python+OpenCV實現RGB轉HSI

cv2.cvtColor函式封裝了各種顏色空間之間的轉換,唯獨沒有RGB與HSI之間的轉換,網上查來查去也只有C++或MATLAB版本的,自己要用到python裡,所以就寫寫python版本的。 HSI顏色模型是一個滿足計算機數字化顏色管理需要的高度抽象模

python+OpenCv+dlib實現人臉68個關鍵點檢測並標註

寒假跟著老師做科技部的專案,主要做微表情的檢測。剛開始一頭霧水,在研究了兩天之後,漸漸找到了一點感覺。 ——這裡主要實現了利用python3.6 + OpenCV + dlib 實現人臉68個關鍵點檢測並標註 。 python3.6下dlib的

Python 多元迴歸實現檢驗

python 實現案例1、選取資料 執行程式碼#!usr/bin/env python #_*_ coding:utf-8 _*_ import pandas as pd import seaborn as sns import matplotlib.pyplot as pl

Python專案實現微信聊天機器人

說明,以下內容有很多個版本,都可以使用。自己根據日期分割來看看''' from wxpy import * from chatterbot import ChatBot from chatterbot.trainers import ChatterBotCorpusTra

Python openCVerror:(-215)scn == 3 || scn ==4 in function cv::cvtColor

在使用以下程式碼讀取圖片並將圖片轉換為灰度: imageA = cv2.imread("D:/111test/111.png",0) grayA = cv2.cvtColor(imageA,cv2.COLOR_BGR2GRAY) 出現錯誤:error:(-2

Python切片 實現一個trim()函式,去除字串首尾以及中間重複的空格,不呼叫str的strip()方法。

# -*- coding=utf-8 -*-def trim(s):    length = len(s)    if length != 0:        if s[0] == ' ':            return trim(s[1:])        if s[

Python爬蟲Selenium常用操作,下載youtube視訊例項

selenium常用操作: from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait

python+opencv選出視頻中一幀再利用鼠標回調實現圖像上畫矩形

open cap 圖像 ide http 這樣的 vedio lease 等待   最近因為要實現模板匹配,需要在視頻中選中一個目標,然後框出(即作為模板),對其利用模板匹配的方法進行檢測。於是需要首先選出視頻中的一幀,但是在利用攝像頭讀視頻的過程中我唯一能想到的方法就是: