利用 Avisynth 2.5.8 的 ColorKeyMask 功能实现视频抠像
下载安装Avisynth 2.5.8 + 下载安装 FFMpeg
编写 Avisynth 脚本 mating.avs
----------------------------------------------------------------------------------
video1 = AVISource ("背景.avi").ConvertToRGB32
video2 = AVISource ("前景.avi").ConvertToRGB32.colorkeymask($45D168,40).Blur(0,1)
Layer(video1,video2,"add",255,0,0)
----------------------------------------------------------------------------------
然后编写批处理 play.bat
----------------------------------------------------------------------------------
ffplay "mating.avs" -loop 0
----------------------------------------------------------------------------------
运行play.bat
----------------------------------------------------------------------------------
缺点:边界过度不够自然
优点:处理速度较快下面是优化方案
1.下载 Avisynth 2.5.8 源代码(用VC + MASM32) Avisynth_258_src.zip
http://sourceforge.net/projects/avisynth2/files/AviSynth%202.5/AviSynth%202.5.8/说明:需要VC6 + MASM32 汇编
MASM32 汇编 下载地址
http://www.masm32.com/masmdl.htm2.要修改的函数 ColorKeyMask::GetFrame(int n, IScriptEnvironment *env)
Avisynth_258_src.zip 解压到一个 .\avisynth_2.5.8\ 目录
...\avisynth_2.5.8\src\filters\layer.cpp 文件中有这个函数
原先的函数使用 IsClose 函数过滤 去掉设置相近的颜色
要优化的部分在 ColorKeyMask::GetFrame 函数内static __inline bool IsClose(int a, int b, unsigned threshold)
{
return (unsigned(a-b+threshold) GetFrame(n, env);
env->MakeWritable(&frame);BYTE* pf = frame->GetWritePtr();
const int pitch = frame->GetPitch();
const int rowsize = frame->GetRowSize();if (!(env->GetCPUFlags() & CPUF_MMX) || vi.width==1)
{
const int R = (color >> 16) & 0xff;
const int G = (color >> 8) & 0xff;
const int B = color & 0xff;for (int y=0; y 255
// pf[x+(0-2)]是 RGB 值 pf[x+3] alpha值
// 从 pf 到 pf + pitch 是 一帧图像中的一行
// 这部分代码写出来之后可能不超过 100 行,就是算法需要好好研究//...
//在这里添加进行边缘模糊的算法 结束
}
pf += pitch;
}
}
else // MMX 这部分是为了加快处理速度 使用 MMX 指令集, 优化时暂不考虑这部分
{
const int height = vi.height;
const int col8 = color;
const int tol8 = 0xff000000 | (tolR利用 Avisynth 2.5.8 的 ColorKeyMask 功能实现视频抠像的更多相关文章
- Python中利用函数装饰器实现备忘功能
Python中利用函数装饰器实现备忘功能 这篇文章主要介绍了Python中利用函数装饰器实现备忘功能,同时还降到了利用装饰器来检查函数的递归.确保参数传递的正确,需要的朋友可以参考下 " ...
- ASP.net(C#)利用SQL Server实现注册和登陆功能
说说我现在吧,楼主现在从事的事IT行业,主攻DotNet技术:当然这次上博客园我也是有备而来,所有再次奉献鄙人拙作,以飨诸位,望诸位不吝赐教. 世界上大多数的工作都是熟练性的工种,编程也不例外,做久了 ...
- 利用MYSQL的函数实现用户登录功能,进出都是JSON(第二版)
利用MYSQL的函数实现用户登录功能,进出都是JSON(第二版) CREATE DEFINER=`root`@`%` FUNCTION `uc_session_login`( `reqjson` JS ...
- 利用 Android 系统原生 API 实现分享功能
利用 Android 系统原生 API 实现分享功能 这篇文章提供一个封装好的 Share2 库供大家参考. GitHub 项目地址:Share2 大家知道,要调用 Android 系统内建的分享功能 ...
- 利用SharedPreferences完成记住账号密码的功能
利用SharedPreferences完成记住账号密码的功能 效果图: 记住密码后,再次登录就会出现账号密码,否则没有. 分析: SharedPreferences可将数据存储到本地的配置文件中 Sh ...
- c# wpf 利用截屏键实现截屏功能
原文:c# wpf 利用截屏键实现截屏功能 最近做一个wpf程序需要截图功能,查找资料费了一些曲折,跟大家分享一下. 先是找到了这样一份代码: static class Scr ...
- 痞子衡嵌入式:一次利用IAR自带CRC完整性校验功能的实践(为KBOOT加BCA)
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家分享的是利用IAR自带CRC完整性校验功能的一次实践(为KBOOT加BCA). 痞子衡之前写过两篇关于IAR中自带CRC校验功能的文章 < ...
- DevExpress v15.2新功能介绍视频(25集全)
DevExpress v15.2新功能介绍视频(25集全) http://www.devexpresscn.com/Resources/Documentation-508.html DevExpres ...
- Java:利用java Timer类实现定时执行任务的功能
一.概述 在java中实现定时执行任务的功能,主要用到两个类,Timer和TimerTask类.其中Timer是用来在一个后台线程按指定的计划来执行指定的任务.TimerTask一个抽象类,它的子类代 ...
随机推荐
- 【POJ 1094】拓扑排序
题意 给出n,代表有以A开始的n个字母,给出它们的m个小于关系(A<B).如果前i个关系可以确定n个字母的一个顺序就输出: Sorted sequence determined after i ...
- 【CodeForces 624C】Graph and String
题 题意 n个表示abc三个字符的点,所有a和b是相连的,所有b和c是相连的,所有相同的是相连的,现在给你n个点和他们之间的m条边,判断是否存在这样的字符串,存在则给出一个符合条件的. 分析 我的做法 ...
- 以一个权限系统来告别WebForm —开篇
前言: 当今是互联网的时代,我们己经阻止不了它的发展了,只有跟上脚步,才不会被抛弃,松散了这么久,该紧紧了. 背景: 我之所以说以一个权限应用系统来告别我的WebForm内部系统的生涯,是缘于我自 ...
- Linux /proc、/dev Principle
目录 . /proc简介 . 内核机制相关 . 进程信息 . 硬件设备相关 . 系统信息 . /dev简介 . 内存相关 1. /proc简介 在linux的根目录下有一个/proc目录,/proc文 ...
- [IOS+PHP Jason格式的发送与解析]
服务器端PHP文件connect.php: <?php $q = mysql_connect("localhost","root","" ...
- HDU 5714
Problem Description 小明在旅游的路上看到了一条美丽的河,河上有许多船只,有的船只向左航行,有的船只向右航行.小明希望拍下这一美丽的风景,并且把尽可能多的船只都完整地拍到一张照片中. ...
- Latex 笔记
A source file is made up of text, formulas, and instructions (commands) to $\LaTeX.$ Commands start ...
- java 内存分析
Java堆内存(heap memory)的十个要点: 1. Java堆内存是操作系统分配给JVM的内存的一部分. 2. 当我们创建对象时,它们存储在Java堆内存中. 3. 为了便于垃圾回收,Java ...
- 修改了n次效率还是不可接受
- json(2)
JSON 语法规则 JSON 语法是 JavaScript 对象表示法语法的子集. 数据在名称/值对中 数据由逗号分隔 花括号保存对象 方括号保存数组 JSON 名称/值对 JSON 数据的书写格式是 ...