AS3灰色图像
一开始觉得AS3的滤镜很难使用,尤其是那些矩阵,让人望而生畏。最近写一个聊天模块,要用到离线状态下的灰色头像,于是认真研究了ColorMatrixFilter,发现其实也没有那么难。所谓的矩阵其实就是一个再普通不过的Array,只要弄懂这个Array各个元素的关系就很容易使用滤镜。
先发代码,下面再详细介绍。这个程序实现加载一张彩色图像,通过滤镜变成黑白图像之后输出。
package {
import flash.display.Bitmap;
import flash.display.Loader;
import flash.display.Sprite;
import flash.events.Event;
import flash.filters.ColorMatrixFilter;
import flash.net.URLRequest;
public class ColorFilterSample extends Sprite
{
private var loader:Loader;
public function ColorFilterSample()
{
loader=new Loader();
loader.contentLoaderInfo.addEventListener
(Event.COMPLETE, onComplete);
loader.load(new URLRequest("hehua.jpg"));
}
private function onComplete(e:Event):void{
//加载一张彩色图片
var image:Bitmap=new Bitmap();
image=Bitmap(loader.content);
//定义滤镜matrix,一个包含20个项的数组
var matrix:Array=[0.3086, 0.6094, 0.0820, 0, 0,
0.3086, 0.6094, 0.0820, 0, 0,
0.3086, 0.6094, 0.0820, 0, 0,
0, 0, 0, 1, 0];
//初始化一个ColorMatrixFilter对象(matrix作为参数)
var myfilter:ColorMatrixFilter=new ColorMatrixFilter(matrix);
//将滤镜应用于图片
image.filters=[myfilter];
addChild(image);
}
}
}
首先定义一个matrix数组:一个包含20个浮点数的数组。AS3.0帮助文档中的计算公式是这样的:
redResult = (a[0] * srcR) + (a[1] * srcG) + (a[2] * srcB) + (a[3] * srcA) + a[4]
greenResult = (a[5] * srcR) + (a[6] * srcG) + (a[7] * srcB) + (a[8] * srcA) + a[9]
blueResult = (a[10] * srcR) + (a[11] * srcG) + (a[12] * srcB) + (a[13] * srcA) + a[14]
alphaResult = (a[15] * srcR) + (a[16] * srcG) + (a[17] * srcB) + (a[18] * srcA) + a[19]
上面的公式看起来有点复杂,没关系,再看下面的图示就清晰多了:
srcR srcG srcB srcA offset
redResult a[0] a[1] a[2] a[3] a[4]
greenResult a[5] a[6] a[7] a[8] a[9]
blueResult a[10] a[11] a[12] a[13] a[14]
alphaResult a[15] a[16] a[17] a[18] a[19]
srcR,srcG,srcB,srcA表示原始图像每个像素的RGBA值(关于像素颜色的RGBA值请查阅手册,这里不再展开),redResult,greenResutl,blueResult,alphaResult表示目标图像的RGBA值。上面公式的意思是说:redResult的值是a[0]、a[1]、a[2]、a[3]分别与 srcR,srcG,srcB,srcA相乘,再加上a[4]的总和(a[4]是偏移量)。greenResutl,blueResult,alphaResult以此类推。这样说应该很容易理解了吧?
好吧,这个公式无非就是说原始图像的像素值,通过和这个数组交叉相乘,得到目标图像的像素值。
很明显,我们给这个数组定义不同的值,则会得到不同的结果,目标图像的效果也不一样。这里要得到灰度图像应该使用这个数组:
[0.3086, 0.6094, 0.0820, 0, 0,
0.3086, 0.6094, 0.0820, 0, 0,
0.3086, 0.6094, 0.0820, 0, 0,
0, 0, 0, 1, 0];
这个数组凭什么得来的呢?应该是某些大师实验得到的吧,百度可以搜索到这方面的专业论述,我这里就说一下大概意思。话说取得原始图像的RGB值,计算得到它们的平均值之后再赋给新的RGB值,这样对每个像素处理之后就得到黑白图像了,或者可以理解成RGB值按照0.33 : 0.33 : 0.33的权值重新分配;后来有些大师研究得到结论:如果RGB值按照0.3086 : 0.6094 : 0.0820的比例分配,得到的灰度图像看起来最顺眼,于是就有了上面的数组!顺便再提一下,这里的alpha值没有改变(那个数字1,你懂的),还有偏移量都为0。
AS3灰色图像的更多相关文章
- 基于canvas图像处理的图片 灰色图像
图片展示网页往往色彩繁杂,当一个网页上有多张图片的时候用户的注意力就很不容易集中,而且会造成网站整个色调风格的不可把控. 能不能把所有的预览图变成灰度图片,等用户激活某张图片的时候再上色呢? 以前,唯 ...
- [ActionScript 3.0] AS3实现图像径向转旋效果
原图 效果 import flash.display.Bitmap; import flash.display.BitmapData; import flash.display.Blen ...
- 利用神经网络进行网络流量识别——特征提取的方法是(1)直接原始报文提取前24字节,24个报文组成596像素图像CNN识别;或者直接去掉header后payload的前1024字节(2)传输报文的大小分布特征;也有加入时序结合LSTM后的CNN综合模型
国外的文献汇总: <Network Traffic Classification via Neural Networks>使用的是全连接网络,传统机器学习特征工程的技术.top10特征如下 ...
- 深入学习OpenCV中图像灰度化原理,图像相似度的算法
最近一段时间学习并做的都是对图像进行处理,其实自己也是新手,各种尝试,所以我这个门外汉想总结一下自己学习的东西,图像处理的流程.但是动起笔来想总结,一下却不知道自己要写什么,那就把自己做过的相似图片搜 ...
- PIL:处理图像的好模块
介绍 PIL是一个专门用来处理图像的模块,可以对图象进行各种各样的变换 打开一张图片 from PIL import Image # 调用Image下的open方法,即可打开一张图片 # 得到的im便 ...
- Python——图像手绘效果
1.图像的RGB色彩模式 PIL PIL, Python Image Library PIL库是一个具有强大图像处理能力的第三方库 在命令行下的安装方法: pip install pillow fro ...
- PHP 动态生成验证码
……机器人会在网站中搜寻允许他们插入广告的输入表单,在虚拟世界没有什么能阻挡它们胡作非为.这些机器人效率极高,完全不关心所攻击的表单的本来用途.它们唯一的目标就是用它们的垃圾广告覆盖你的内容,残忍地为 ...
- opencv6.4-imgproc图像处理模块之直方图与模板
接opencv6.3-imgproc图像处理模块之边缘检测 九.直方图的相关操作 直方图是图像中像素强度分布的图形表达方式:它统计了每一个强度值所具有的像素个数 上图是一个灰色图像,通过对图像的每个不 ...
- [OpenCV] Image Processing - Grayscale Transform
"每个像素的输出值只取决于其输入值" 重难点:Histogram equalization 参考:笑得很甜 http://blog.csdn.net/xiaowei_cqu/art ...
随机推荐
- leetcode 删除一张表中重复邮箱的数据,并且保留最小id 的 那条
/* create view testview as SELECT subject,MIN(Id) as id FROM test GROUP BY subject; select * FROM te ...
- Node Addon
Node Addon as bridge between javascript and C++ #include <node.h> namespace HelloWorldDemo { u ...
- 使用IDEA查看变量调用链
在开发中,我们有时需要查看某个变量是怎么来的,从哪个类的某个方法调用后进入另一个类的某个方法. 如果只有一两层的调用,那么还能直接通过方法跳转来观察. 但是,如果有七八层的调用链呢,在各个方法之间跳来 ...
- 分布式CAP理论介绍:一致性(Consistency),可用性(Availability),容忍网络分区(Partition tolerance)
在理论计算机科学中,CAP定理(CAP theorem),又被称作布鲁尔定理(Brewer's theorem),它指出对于一个分布式计算系统来说,不可能同时满足以下三点: 一致性(Consisten ...
- Join Reorder优化 - 论文摘要
Query Simplification: Graceful Degradation for Join-Order Optimization 这篇的related work可以参考,列的比较全面, Q ...
- 解决electron-vue中无法Element的Tooltip组件
打开文件:electron-vue/webpack.renderer.config.js 在大约21行左右找到 let whiteListedModules 将element-ui添加进去,最终如下所 ...
- js 经常用于条件判断 大于等于0 的正整数
/^\d+(?=\.{,}\d+$|$)/.test() // true 转:https://www.jianshu.com/p/feef5e62dd67
- Mysql关键字之Group By(一)
原文地址,优先更新https://hhe0.github.io group by 是一个我们在日常工作学习过程中经常遇到的一个Mysql关键字.现总结其用法如下,内容会不断补充,出现错误欢迎批评指正. ...
- [Bayes] Concept Search and LDA
重要的是通过实践更深入地了解贝叶斯思想,先浅浅地了解下LDA. 相关数学知识 LDA-math-MCMC 和 Gibbs Sampling LDA-math - 认识 Beta/Dirichlet 分 ...
- EasyNVR网页Chrome无插件播放摄像机视频功能二次开发之云台控制接口示例代码
随着多媒体技术和网络通信技术的迅速发展,视频监控技术在电力系统.电信行业.工业监控.工地.城市交通.水利系统.社区安防等领域得到越来越广泛的应用.摄像头直播视频监控通过网络直接连接,可达到的世界任何角 ...