我正在做一个网络应用程序,我从IP摄像机中提取图像,我需要能够看到停车位是否有车.我想使用某种形状检测来做到这一点,但我似乎找到的只是来自c的面部检测端口和基本形状,如正方形.有人能指出我正确的方向,所以我可以自己进行形状检测吗?
现在我正在绘制蓝色框并获取x,y,h,w的图像数据,看看除了停车场的0xFFFFFF之外我是否可以获得任何其他颜色但是它在夜间不起作用将会产生偏差人类走路.
任何帮助,将不胜感激..
function drawgrid(){
context.drawImage(img, 0, 0);
localStorage.setItem( "savedImageData", canvas.toDataURL("image/png") );
context.beginPath();
context.rect(308, 240, 250, 100);
context.lineWidth = 2;
context.strokeStyle = 'blue';
context.stroke();
var dataURL = canvas.toDataURL();
}
这是抓取图像数据将其保存到本地存储,然后我遍历每个像素,但我不认为这是正确的方法.
解决方法:
对于SO来说,问题可能有点宽泛,但您可以使用类似以下方法的方法来更接近:
>对于每个采样图像,将其转换为灰度并减去前一个图像(或者不时地对主帧进行采样,然后将其用作新帧的减法器).
>应用阈值过滤器 – 以下所有值均转换为黑色,以上均为白色
>应用erosion filter以处理因图像中的噪声而导致的像素
>应用统计度量来确定区域中更改的像素数是否应触发“警报”.
这听起来可能很简单,但是您遇到了各种各样的挑战,例如光线条件和噪音,小动作和大动作.它(几乎)都是关于查找和调整值,采样率,阈值,直到找到符合您情况的东西.这些值会因白天和夜晚的光线条件而变化,例如在夜晚或光线不足(阴天,黑暗的天气)时,您将不得不处理图像中的大量噪音.对于光线变化很大的阴天和大风日,您将不得不处理阈值和采样率,如果您的相机设置为自动调整,您将根据白平衡获得各种亮度值(即使转换为灰度), f-stop,快门时间等.
它们都会影响结果,但是它会影响到多少会影响最终结果和统计部分进入的结果.
还有其他几种方法,但这是一个非常广泛的主题.无论如何,我希望这可以给你一些有希望的方向点.