首页 > 搜索 > c图像滤镜算法,图像处理的滤镜算法

c图像滤镜算法,图像处理的滤镜算法

互联网 2020-10-23 02:15:30
在线算命,八字测算命理
灰度滤镜

将颜色的RGB设置为相同的值即可使得图片为灰色,一般处理方法有:1、取三种颜色的平均值2、取三种颜色的最大值(最小值)3、加权平均值:0.3R + 0.59G + 0.11*B

for(var i = 0; i < data.length; i+=4) { var grey = (data[i] + data[i+1] + data[i+2]) / 3; data[i] = data[i+1] = data[i+2] = grey;}

image.png

黑白滤镜

顾名思义,就是图片的颜色只有黑色和白色,可以计算rgb的平均值arg,arg>=100,r=g=b=255,否则均为0

for(var i = 0; i < data.length; i += 4) { var avg = (data[i] + data[i+1] + data[i+2]) / 3; data[i] = data[i+1] = data[i+2] = avg >= 100 ? 255 : 0;}

image.png

反向滤镜

就是RGB三种颜色分别取255的差值。

for(var i = 0; i < data.length; i+= 4) {data[i] = 255 - data[i];data[i + 1] = 255 - data[i + 1];data[i + 2] = 255 - data[i + 2];}

image.png

去色滤镜

rgb三种颜色取三种颜色的最值的平均值。

for(var i = 0; i < data.length; i++) { var avg = Math.floor((Math.min(data[i], data[i+1], data[i+2]) + Math.max(data[i], data[i+1], data[i+2])) / 2 ); data[i] = data[i+1] = data[i+2] = avg;}

单色滤镜

就是只保留一种颜色,其他颜色设为0

for(var i = 0; i < canvas.height * canvas.width; i++) {data[i*4 + 2] = 0;data[i*4 + 1] = 0;}

高斯模糊滤镜

高斯模糊的原理就是根据正态分布使得每个像素点周围的像素点的权重不一致,将各个权重(各个权重值和为1)与对应的色值相乘,所得结果求和为中心像素点新的色值。我们需要了解的高斯模糊的公式:

function gaussBlur(imgData, radius, sigma) {var pixes = imgData.data,height = imgData.height,width = imgData.width,radius = radius || 5;sigma = sigma || radius / 3;var gaussEdge = radius * 2 + 1;var gaussMatrix = [],gaussSum = 0,a = 1 / (2 * sigma * sigma * Math.PI),b = -a * Math.PI;for(var i = -radius; i{return e < 0 ? 0 : e > 255 ? 255 : e;});[imgData.data[i*4], imgData.data[i*4+1], imgData.data[i*4+2]] = rgbArr;}

image.png

冰冻滤镜

公式:r = (r-g-b)*3/2;g = (g-r-b)*3/2;b = (b-g-r)*3/2;

for(var i = 0; i < imgData.height * imgData.width; i++) {var r = imgData.data[i*4],g = imgData.data[i*4+1],b = imgData.data[i*4+2];var newR = (r - g -b) * 3 /2;var newG = (g - r -b) * 3 /2;var newB = (b - g -r) * 3 /2;var rgbArr = [newR, newG, newB].map((e) => {return e < 0 ? 0 : e > 255 ? 255 : e;});[imgData.data[i*4], imgData.data[i*4+1], imgData.data[i*4+2]] = rgbArr;}

连环画滤镜

公式:R = |g – b + g + r| * r / 256

G = |b – g + b + r| * r / 256;

B = |b – g + b + r| * g / 256;

for(var i = 0; i < imgData.height * imgData.width; i++) {var r = imgData.data[i*4],g = imgData.data[i*4+1],b = imgData.data[i*4+2];var newR = Math.abs(g - b + g + r) * r / 256;var newG = Math.abs(b -g + b + r) * r / 256;var newB =Math.abs(b -g + b + r) * g / 256;var rgbArr = [newR, newG, newB];[imgData.data[i*4], imgData.data[i*4+1], imgData.data[i*4+2]] = rgbArr;}

image.png

褐色滤镜

公式:r = r * 0.393 + g * 0.769 + b * 0.189;g = r * 0.349 + g * 0.686 + b * 0.168;b = r * 0.272 + g * 0.534 + b * 0.131;

for (var i = 0; i < imgData.height * imgData.width; i++) {var r = imgData.data[i * 4],g = imgData.data[i * 4 + 1],b = imgData.data[i * 4 + 2];var newR = r * 0.393 + g * 0.769 + b * 0.189;var newG = r * 0.349 + g * 0.686 + b * 0.168;var newB =r * 0.272 + g * 0.534 + b * 0.131;var rgbArr = [newR, newG, newB];[imgData.data[i * 4], imgData.data[i * 4 + 1], imgData.data[i * 4 + 2]] = rgbArr;}

image

本文来源于网络:查看 >https://juejin.im/post/5b9e127df265da0a9a395e01
免责声明:非本网注明原创的信息,皆为程序自动获取互联网,目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责;如此页面有侵犯到您的权益,请给站长发送邮件,并提供相关证明(版权证明、身份证正反面、侵权链接),站长将在收到邮件12小时内删除。

相关阅读

一周热门

查看更多