我编写的代码采用Black&白色图像并检查特定区域(具有方形)的像素,并最终返回其中有多少是黑色的总和,该区域的每个像素都在For循环中读取,如下一个示例所示:
function my_isblack(x,y){
var p = ctx.getImageData(x, y, 1, 1).data;
if(p[0]<50 && p[1]<50 && p[2]<50){
return 1;
}
else{
return 0;
}
}
正如你在for循环中看到的那样,我调用一个函数来验证特定像素是否相当黑:
for i in range(0,25000):
Wres[:,i] = np.matmul(W[:,:,i],res[:,i])
你可以想象,这有点计算成本。但问题是,对于我的电脑,它突然变得比其他人慢得多(即使是最糟糕的处理器)。我已经检查了RAM内存和处理器,并且它们都没有使用超过30%,并且运行代码之前的处理器接近0%。
不知道还有什么地方可以看。我很感激一些帮助,如果有人知道如何更快地做到这一点,那将是非常苛刻的
答案 0 :(得分:0)
按照@ASDFGerte的建议,我会尝试拨打getImageData
:
var x=10; var y=10; var width=50; var height=50;
var counter=0;
var image;
var p; //global data
function init(){
var c = document.getElementById("myCanvas");
var ctx = c.getContext("2d");
ctx.fillStyle = "black";
ctx.fillRect(10, 10, 50, 50); //this is just a black square
image = ctx.getImageData(x, y, width, height); //Load the image
p = image.data; //get the data of the image
is_box_black_corner();
};
function is_box_black_corner(){
for (var i=x; i<(x+width); i++){
for (var j=y; j<(y+height); j++){
if(my_isblack(i,j)==1){
counter++;
}
}
}
console.log(counter);
};
function my_isblack(x,y){
if(p[0]<50 && p[1]<50 && p[2]<50){ //check the global data
return 1;
}
else{
return 0;
}
};