滤镜之像素化Pixelate
来源:互联网 发布:淘宝洗照片哪家好 编辑:程序博客网 时间:2024/06/08 13:10
像素化可以认为是马赛克,是比较常见的滤镜了,也是一个比较简单的滤镜。在很多的移动图像处理软件中都有这个功能,可以实现交互指定需要马赛克的地方。下图是实现的一些效果:
实现原理:
设定马赛克块的大小,统计每个块中所有像素的平均值,以平均值代替每个块中的像素值即是马赛克的效果。如8x8的块,将64个像素加起来求均值,将均值赋值给这个64个像素(每个块中的像素值都是一样的)。
for (y1 = 0, y2 = 0; y1 < height; ){// collect pixelsmemset(tmpR,0,sizeof(int)*len);memset(tmpG,0,sizeof(int)*len);memset(tmpB,0,sizeof(int)*len);// calculatefor ( i = 0; ( i < hr ) && ( y1 < height ); i++, y1++ ){// for each pixelfor ( x = 0; x < width; x++, src+=3 ){tmpR[(int) ( x / wr )] += *src;tmpG[(int) ( x / wr )] += *(src+1);tmpB[(int) ( x / wr )] += *(src+2);}}// get average valuest1 = i * wr;t2 = i * rem;for ( j = 0; j < len - 1; j++ ){tmpR[j] /= t1;tmpG[j] /= t1;tmpB[j] /= t1;}tmpR[j] /= t2;tmpG[j] /= t2;tmpB[j] /= t2;// save average value to destination imagefor ( i = 0; ( i < hr ) && ( y2 < height ); i++, y2++ ){// for each pixelfor ( x = 0; x < width; x++, dst+=3 ){*dst = (unsigned char) tmpR[(int) ( x / wr )];*(dst+1) = (unsigned char) tmpG[(int) ( x / wr )];*(dst+2) = (unsigned char) tmpB[(int) ( x / wr )];}}}
较为复杂的马赛克效果可以是菱形,而不是正方形,这时候就需要通过角度来计算每个块所包含的像素值,原理和上面一样。
美图秀秀中有局部马赛克的功能就是这样实现的:
如何做到上述鼠标经过的地方出现马赛克,有一张原始图和处理之后的马赛克图像,两张图像叠加后可以出现上述的效果,鼠标经过的地方出现处理之后的马赛克的图,未经过的地方出现原始图。
- 滤镜之像素化Pixelate
- canvas像素级操作实现滤镜之浮雕滤镜
- canvas像素级操作实现滤镜之浮雕滤镜
- canvas像素级操作实现滤镜之反色滤镜、黑白滤镜
- canvas像素级操作实现滤镜之反色滤镜、黑白滤镜
- canvas像素级操作实现滤镜之灰度效果、怀旧滤镜
- canvas像素级操作实现各种滤镜之高斯模糊
- canvas像素级操作实现各种滤镜之高斯模糊
- canvas 滤镜效果 通过更改像素
- canvas图像像素处理- 马赛克/滤镜(一)
- ActionScript图形之滤镜
- 滤镜之毛玻璃FrostedGlass
- 滤镜之瓷砖TileReflect
- 滤镜之浮雕Emboss
- 滤镜之颜色特效
- css之初识滤镜
- iOS 之滤镜 详解
- PS之滤镜
- WRKRPYLE-自动回复询问类消息(Inquiry Message)
- android中文字中间有超链接的实现方法
- Chebyshev多项式, Legendre多项式,与Chebyshev多项式零点插值
- jfinal 小例子
- MyEclipse安装插件的几种方法
- 滤镜之像素化Pixelate
- 输出星号图
- check record lock
- 关于uboot中tftp上传内存数据到tftp服务器
- poj3904 容斥原理
- AD10画板细节
- UVA 1438 - Asteroids(三维凸包)
- 七、数据更新
- Linux网络socket编程