使用 p5.js 获取像素亮度
Get pixel brightness with p5.js
我正在尝试从图像中获取像素数据以计算图像的平均亮度。我使用 img.loadPixels();
访问数据没有问题,但由于某种原因,像素数组的某些元素是 undefined
,这破坏了我的计算。
这是 sketch.js
的代码:
var img;
var brightness;
var inc;
var gotBright = false;
function preload(){
img = loadImage('assets/2.png');
}
function setup(){
createCanvas(500, 500);
background(0);
}
function draw(){
img.resize(10, 10);
image(img, 0, 0, img.width, img.height);
brightness = 0;
inc = 0;
if (gotBright == false) {
img.loadPixels();
loadPixels();
for (var i = 0; i < img.width; i++) {
for (var j = 0; j < img.height; j++) {
var index = (i * j * img.width) * 4;
var r = img.pixels[index + 0];
var g = img.pixels[index + 1];
var b = img.pixels[index + 2];
brightness += (r + g + b) / 3;
inc ++;
console.log(inc, r , g, b);
}
}
gotBright = true;
brightness = brightness/inc;
}
}
brightness
应该等于 0 到 255 之间的某个数字,但现在是 NaN
...
如果您对计算图像平均亮度的其他方法有任何建议,我很高兴听到他们的建议:)
谢谢!
我认为你的指数计算有误。不应该是:
var index = (i + j * img.width) * 4;
走在正确的轨道上。您需要确保您的像素索引是正确的。最好的方法是拿出一张方格纸并画出一些例子。
或者您可以只使用带有 x
和 y
参数的 get()
函数。来自 the reference:
var myImage;
var c;
function preload() {
myImage = loadImage("assets/rockies.jpg");
}
function setup() {
background(myImage);
noStroke();
c = myImage.get(60, 90);
fill(c);
rect(25, 25, 50, 50);
}
我正在尝试从图像中获取像素数据以计算图像的平均亮度。我使用 img.loadPixels();
访问数据没有问题,但由于某种原因,像素数组的某些元素是 undefined
,这破坏了我的计算。
这是 sketch.js
的代码:
var img;
var brightness;
var inc;
var gotBright = false;
function preload(){
img = loadImage('assets/2.png');
}
function setup(){
createCanvas(500, 500);
background(0);
}
function draw(){
img.resize(10, 10);
image(img, 0, 0, img.width, img.height);
brightness = 0;
inc = 0;
if (gotBright == false) {
img.loadPixels();
loadPixels();
for (var i = 0; i < img.width; i++) {
for (var j = 0; j < img.height; j++) {
var index = (i * j * img.width) * 4;
var r = img.pixels[index + 0];
var g = img.pixels[index + 1];
var b = img.pixels[index + 2];
brightness += (r + g + b) / 3;
inc ++;
console.log(inc, r , g, b);
}
}
gotBright = true;
brightness = brightness/inc;
}
}
brightness
应该等于 0 到 255 之间的某个数字,但现在是 NaN
...
如果您对计算图像平均亮度的其他方法有任何建议,我很高兴听到他们的建议:) 谢谢!
我认为你的指数计算有误。不应该是:
var index = (i + j * img.width) * 4;
或者您可以只使用带有 x
和 y
参数的 get()
函数。来自 the reference:
var myImage;
var c;
function preload() {
myImage = loadImage("assets/rockies.jpg");
}
function setup() {
background(myImage);
noStroke();
c = myImage.get(60, 90);
fill(c);
rect(25, 25, 50, 50);
}