Dragon
  非凡社群营销服务平台专注于社群管理,社群裂变,多群同步直播,企业微信SCRM系统。欢迎合作咨询;客服微信11112751

相信很多前端同学对于二维码识别、图像对比等这类高大上的图像识别技术望而生畏,觉得此类识别技术只能通过更加底仓的高级语言才能实现(诸如 c 等),本文试图从前端的角度出发介绍如何通过 canvas 来进行简单的图像识别。

canvas 是什么
canvas 是 HTML5 中的新元素,你可以使用 javascript 用它来绘制图形、图标、以及其它任何视觉性图像

canvas 图片处理运用
对于 canvas 来说,主要是两个方法对图片处理比较重要,一个是通过 html5 canvas 的 getImageData 方法获取图片的像素信息,可以很方便的通过方法导入到把网络图片或者本地的图片导入至 canvas 中并获取图片的像素信息,可以修改像素信息后通过另外一个重要的方法 putImageData 导出处理后的图片。

1、获取 canvas 调用

    var c = document.createElement('canvas');
    context = c.getContext('2d');

2、获取导入图像信息

var hiddenImage = new Image();
    hiddenImage.src=图片地址
     context .drawImage(hiddenImage, 0, 0, width, height);
       hiddenImage .onload=function(){
        context.putImageData(hiddenImage, 0, 0);
    }

3、获取图片的像素信息

 var imageData = context.getImageData(0, 0, w, h);
//注意这个获取的是数组,注意每 1 个像素由数组的 4 个元素组成,四个元素分别代码四个通道 r/g/b/a 的值
for(var j=0;j<hiddenImage.height;j+=1){
    for(var i=0;i<hiddenImage.width;i+=1){
 //注意这里获取图片信息后可以进行定制化处理
            offset=4*(hiddenImage.width*j+i);
            var red = sourceImageData[offset];
            var green = sourceImageData[offset + 1];
            var blue = sourceImageData[offset + 2];
            var brightness = getBrightness(red,green,blue);

    }
  }
  function getBrightness(r,g,b){
        return 0.3*r + 0.59*g + 0.11*b;
    }

4、导出处理过的图片

context.putImageData(第三步处理过得像素信息,0,0);

二维码识别思路
1、设计一个自动等分切割图片的 canvas
程序(利用 canvas 导出原图的二进制数组,然后等分数组后出单个图片的序列库)

2、简单做个爬虫程序,利用步骤 1 完成的程序到需要识别的网站下载该网站的二维码序列图库

3、手工翻译二维码序列图库对应的真实含义,并建立图片到真实含义的 map 表。

4、设计自动图片识别程序,导入需要识别的原二维码后,按照 1 的步骤进行等分,分别拿等分后的图片依次对比步骤 2 获取的图库,对比出对比度最接近的图片,然后通过步骤三翻译出来的 map
表获取对应图片的真实含义

好了,授人以鱼不如授人以渔,通过前端进行做坏事的方法告诉你了,如何发扬光大就看你的灵活运用。

后记
相信在很多人眼中, 前端仅仅是一门简单的处理网页交互、样式门面学科。随着 h5、node 等前端新技术的流行,前端不再是功能有限的学科,而是功能强大到只有你想不到木有做不到地步。

相关推荐

此文已由作者授权腾讯云技术社区发布,转载请注明,获取更多云计算技术干货,可请前往

「点点赞赏,手留余香」

还没有人赞赏,快来当第一个赞赏的人吧!

非凡建群宝给非凡建群宝打赏
×
予人玫瑰,手有余香
  • 2
  • 5
  • 10
  • 20
  • 50
2
支付

本文来自投稿,不代表微信机器人立场,版权归原作者所有,欢迎分享本文,转载请保留出处!

2021-03-12

2021-03-12

×
Tips:非凡社群营销服务平台专注于社群管理,社群裂变,多群同步直播,企业微信SCRM系统。欢迎合作咨询;客服微信11112751