【发布时间】:2020-02-20 19:09:06
【问题描述】:
好的,所以我正在开发一种检测系统,我将把相机对准屏幕,它必须找到红色物体。我可以用图片成功地做到这一点,但问题是加载需要几秒钟。我希望能够对实时视频执行此操作,因此我需要它来立即找到对象。这是我的代码:
video.addEventListener('pause', function () {
let reds = [];
for(x=0; x<= canvas.width; x++){
for(y=0; y<= canvas.height; y++){
let data = ctx.getImageData(x, y, 1, 1).data;
let rgb = [ data[0], data[1], data[2] ];
if (rgb[0] >= rgb[1] && rgb[0] >=rgb[2] && !(rgb[0]>100 && rgb[1]>100 && rgb[2]>100) && rgb[1]<100 && rgb[2]<100 && rgb[0]>150){
reds[reds.length] = [x, y]
}
let addedx = 0
let addedy = 0
for(i=0; i<reds.length; i++){
addedx = addedx + reds[i][0]
addedy = addedy + reds[i][1]
}
let center = [addedx/reds.length, addedy/reds.length]
ctx.rect(center[0]-5, center[1]-5, 10, 10)
ctx.stroke()
}, 0);
是的,我知道它很乱。 for 循环是否有一些缓慢的地方?我知道我正在循环数千个像素,但这是我能想到的唯一方法。
【问题讨论】:
-
似乎您想从 getImageData 中获取整个图像数据集,而不是一次获取 1 个像素。
-
这可行...我会试试看。
标签: javascript performance loops for-loop webcam