条形码解码首先要做定位,找到条形码在图像中的区域。但是有时候受图像质量影响,算法找寻的区域可能产生偏差,最后导致解码失败。这个时候,可以尝试手动选择区域,来辅助条形码的识别。

Web Canvas框选识别条形码

需求:

  1. 在网页中加载条形码图像。
  2. 使用鼠标框选出条形码的区域。
  3. 识别区域中的条形码。

Web Canvas图像显示

创建input选择文件。获取文件对象之后,使用FileReader读取并绘制到canvas上。如果读取的图像太大,可以设定一个最大缩放值:

<input type="file" id="barcode-file" onchange="loadfile()" accept=".jpg,.jpeg,.png,.bmp" />function loadfile() {let img = new Image();var reader = new FileReader();reader.onload = function (evt) {img.onload = function () {                    if (img.width > maxLength) {img.height = maxLength * img.height / img.widthimg.width = maxLength;}else if (img.height > maxLength) {img.width = maxLength * img.width / img.heightimg.height = maxLength;}canvas.width = img.width;canvas.height = img.height;overlay.width = canvas.width;overlay.height = canvas.height;context.drawImage(img, 0, 0, img.width, img.height);};img.src = evt.target.result;};reader.readAsDataURL(name.files[0]);}

鼠标框选矩形区域

要在图像上面绘制出一个矩形框,需要创建另外一个canvas,并把它放置到图像的上面:

<style>#container {position: relative;}#imageCanvas {position: relative;z-index: 1;}#overlay {position: absolute;top: 0;left: 0;z-index: 2}</style><div id="container"><canvas id="imageCanvas"> </canvas><canvas id="overlay"></canvas>
</div>

接下来监听鼠标事件,在鼠标移动的时候绘制矩形:

function clearOverlay() {overlayCtx.clearRect(0, 0, overlay.width, overlay.height);overlayCtx.strokeStyle = '#ff0000';overlayCtx.lineWidth = 5;
}overlay.addEventListener('mousedown', e => {startX = e.offsetX;startY = e.offsetY;isDrawing = true;clearOverlay();overlay.style.cursor = "crosshair";});overlay.addEventListener('mousemove', e => {if (isDrawing) {clearOverlay();overlayCtx.beginPath();overlayCtx.rect(startX, startY, e.offsetX - startX, e.offsetY - startY);  overlayCtx.stroke();} mousePosition.innerHTML = "Cursor: (" + e.offsetX + ", " + e.offsetY + ")";});overlay.addEventListener('mouseup', e => {if (isDrawing) {isDrawing = false;mousePosition.innerHTML = "Cursor: (" + e.offsetX + ", " + e.offsetY + ")";region.innerHTML = "Decode a region: (" + startX + ", " + startY + ", " + e.offsetX + ", " + e.offsetY + "). ";overlay.style.cursor = "default";}});

条形码识别

在鼠标左键抬起的时候,可以获得矩形最终的区域。把这个区域设置到接口中:

overlay.addEventListener('mouseup', e => {if (isDrawing) {isDrawing = false;mousePosition.innerHTML = "Cursor: (" + e.offsetX + ", " + e.offsetY + ")";region.innerHTML = "Decode a region: (" + startX + ", " + startY + ", " + e.offsetX + ", " + e.offsetY + "). ";overlay.style.cursor = "default";// Decode a region of the barcode image(async () => {let settings = await barcodereader.getRuntimeSettings();settings.region.regionLeft = startX * 100 / overlay.width;settings.region.regionTop = startY * 100 / overlay.height;settings.region.regionRight = e.offsetX * 100 / overlay.width;settings.region.regionBottom = e.offsetY * 100 / overlay.height;settings.region.regionMeasuredByPercentage = 1;barcodereader.updateRuntimeSettings(settings);try {let decodingStart = Date.now();await barcodereader.decode(name.files[0]).then((results) => {let decodingEnd = Date.now();let txts = [];try {for (let i = 0; i < results.length; ++i) {txts.push(results[i].BarcodeText);}let barcoderesults = txts.join(', ');catch (e) {}});} catch (error) {alert(error);}})();}});

现在可以很方便的选中一块条形码的区域来查看解码结果。

源码

https://gist.github.com/yushulx/b21d0919a1e92e0a320929799a99a5de

vs矩形框边框线显示被选中的区域;_条形码区域解码:Web小工具相关推荐

  1. vs矩形框边框线显示被选中的区域;_如何使用OpenCV可视化的截取感兴趣区域

    OpenCV是一个著名的计算机视觉库,可以运行在Linux.Windows.Android和Mac OS操作系统上.它轻量级而且高效--由一系列 C 函数和少量 C++ 类构成,同时提供了Python ...

  2. vs矩形框边框线显示被选中的区域;_Excel中,重复的数据高亮显示,如何快速删去?...

    快速删去重复数据,雷哥在这里提供4种超简单的解决方法,大家一看就会. 为了更加直接明了地说明,雷哥在这里通过具体案例进行讲解. 案例:下图B列日期中,橘黄色部分是我们已经标记好颜色的重复项. 要求:快 ...

  3. html在边框线中加文本框,怎么设置幻灯片里的文本框边框线?

    通过设置文本框格式来实现 选中刚刚插入的文本框,右键,选择"设置自选图形/图片格式": 在文本框格式中的颜色与线条界面中,将线条的颜色改为无颜色,然后点击保存. 可以用border ...

  4. qt自定义窗口,其绘制的窗口边框线显示不全

    引言 自定义窗口,该窗口包含标题栏,默认整个窗口的边框线为蓝色,当点击该窗口的时候,窗口的边框线便为红色.程序在运行的时候,窗口的边框线只显示了左右两边的线,没有显示上下边的线. 示例 效果: 解决方 ...

  5. 设置文本框边框不显示

    <input name="str" style="border: 0px none;" type="text">

  6. rviz显示矩形框BoundingBox

    rviz显示矩形框BoundingBox 类似显示如下BoundingBox 需要安装如下依赖 安装ros-melodic-jsk-recognition-msgs等依赖库 sudo apt-get ...

  7. svg 读取SVG文件并绘制矩形框选择图元

    首先是SVG文件,里面包含了几个不同的图元: <?xml version='1.0' standalone='no'?> <!DOCTYPE svg PUBLIC "-// ...

  8. 关于矩形的边框,以及边框线偶尔不显示的问题

    关于矩形的边框,以及边框线偶尔不显示的问题 组件设置边框,是基于四个顶点/四条边,同步向内和向外延展的矩形环形区域!并且很可能会被布局给遮挡,当布局之间不留间隙时!这就会导致出现四边某一边突然没有边框 ...

  9. opencv方框内图像保存_opencv利用矩形框选中某一区域并保存为新图片

    本文实例为大家分享了Android九宫格图片展示的具体代码,供大家参考,具体内容如下 一.基本原理 Mat img= imread(image): Rect rect(50,20, 200, 50); ...

最新文章

  1. python算法书pdf_Python算法很难吗?python神书《算法图解》PDF电子版分享给你!
  2. R语言使用caret包构建随机森林模型(random forest)构建回归模型、通过method参数指定算法名称、通过ntree参数指定随机森林中树的个数
  3. python面向对象之方法
  4. 关于MVC4项目从32位机移到64位机编译报错解决方案
  5. 数组字符串转化成数组与eval函数
  6. python中space_漫谈Python的Namespace
  7. 一文带你读懂单目视觉SLAM数据关联优化
  8. 你爱我,我爱你,IP被封很头疼【Python爬虫实战:ip代理js逆向采集】
  9. Qt之Dialog\widget\ mainwindow的区别和布局管理器 分裂器的区别
  10. UE4 植被工具的使用
  11. Python爬虫实战|爬取视频
  12. BZOJ2434【NOI2011】阿狸的打字机 AC自动机+Fail树+树状数组
  13. html 中图片显示不了,css中不显示图片怎么办
  14. Codeforces_714_A
  15. NodeBB论坛搭建
  16. GPU和CPU芯片区别:为何要用GPU挖矿?
  17. 哪个牌子的蓝牙耳机音质好?公认音质最好的真无线耳机推荐
  18. BZOJ2456mode
  19. Graphviz绘制链表
  20. 电话机器人是如何筛选意向客户的

热门文章

  1. CNN实操记录(goal:一日一更新)
  2. jqGrid细节备注—jqGrid中自定义格式,URL格式
  3. 郝蕾怒骂河南人---江湖再起风云,网络哪里有净土
  4. cocos2d-基本概念(4)-CallFunc Action
  5. Apache出现AH00558错误解决办法
  6. 分享codeigniter 路由(URL)终极优化
  7. 专心写即时通讯软件争取CSDN认证专家
  8. 即时通讯作为互联网最普及的基础服务之一
  9. 好男人必看!女生的30条隐私……
  10. python之线程,不得不了解的硬知识!