Python opencv:實現與自己同框對話的視訊特效
做視訊特效時常用一種畫面拼接的手法,可以實現在一個場景中同一個人與自己同框做出不同動作的效果。
我們知道,從視訊到影象,從影象到畫素,這一層層深入下來,我們只要能操縱每一個畫素點的值,就可以實現任意想要的移花接木效果。
下面,來嘗試使用Python+opencv實現自己與自己同框的視訊特效。
一、素材準備
要求同一個主體(人或動物、物體均可)在同一場景的不同位置拍攝兩段視訊。為了方便後切裁切,最好在鏡頭左端面向右端拍攝一段,然後在鏡頭右端面向左端拍另外一段。
二、特效處理思路
- 分別讀取兩個視訊中的影象幀;
- 兩幀影象分別進行裁切,分別保留每段視訊的主體,切記在拼接的位置(左視訊從右端拼接,右視訊從左端拼接)對主體本身做了切割,這樣效果出來很差;
- 將裁切好的兩幀影象進行拼接,並調整了影象亮度,調整方法為:先將影象從BGR模式轉為HSV模式,調節V(明度)值後,再轉回BGR;
- 在指定幀上新增文字。
三、程式碼
# -*- 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基礎:extend與append的區別
extend與append方法的相似之處在於都是將新接收到引數放置到已有列表的後面。而extend方法只能接收list,且把這個list中的每個元素新增到原list中。 而append方法可以接收任意資料型別的引數,並且簡單地追加到list尾部。 例: a = [(1,2,3)] b =
OpenCV: Mat與IplImage*間的相互轉換
1. Mat -->IplImage Mat mat_img=imread("samples.bmp"); IplImage* ipl_img; ipl_img = &IplImage(mat_img); 2. IplImage--->Mat IplImage*
Python解惑:True與False
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 openCV:error:(-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 等待 最近因為要實現模板匹配,需要在視頻中選中一個目標,然後框出(即作為模板),對其利用模板匹配的方法進行檢測。於是需要首先選出視頻中的一幀,但是在利用攝像頭讀視頻的過程中我唯一能想到的方法就是: