vs矩形框边框线显示被选中的区域;_条形码区域解码:Web小工具
条形码解码首先要做定位,找到条形码在图像中的区域。但是有时候受图像质量影响,算法找寻的区域可能产生偏差,最后导致解码失败。这个时候,可以尝试手动选择区域,来辅助条形码的识别。
Web Canvas框选识别条形码
需求:
- 在网页中加载条形码图像。
- 使用鼠标框选出条形码的区域。
- 识别区域中的条形码。
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小工具相关推荐
- vs矩形框边框线显示被选中的区域;_如何使用OpenCV可视化的截取感兴趣区域
OpenCV是一个著名的计算机视觉库,可以运行在Linux.Windows.Android和Mac OS操作系统上.它轻量级而且高效--由一系列 C 函数和少量 C++ 类构成,同时提供了Python ...
- vs矩形框边框线显示被选中的区域;_Excel中,重复的数据高亮显示,如何快速删去?...
快速删去重复数据,雷哥在这里提供4种超简单的解决方法,大家一看就会. 为了更加直接明了地说明,雷哥在这里通过具体案例进行讲解. 案例:下图B列日期中,橘黄色部分是我们已经标记好颜色的重复项. 要求:快 ...
- html在边框线中加文本框,怎么设置幻灯片里的文本框边框线?
通过设置文本框格式来实现 选中刚刚插入的文本框,右键,选择"设置自选图形/图片格式": 在文本框格式中的颜色与线条界面中,将线条的颜色改为无颜色,然后点击保存. 可以用border ...
- qt自定义窗口,其绘制的窗口边框线显示不全
引言 自定义窗口,该窗口包含标题栏,默认整个窗口的边框线为蓝色,当点击该窗口的时候,窗口的边框线便为红色.程序在运行的时候,窗口的边框线只显示了左右两边的线,没有显示上下边的线. 示例 效果: 解决方 ...
- 设置文本框边框不显示
<input name="str" style="border: 0px none;" type="text">
- rviz显示矩形框BoundingBox
rviz显示矩形框BoundingBox 类似显示如下BoundingBox 需要安装如下依赖 安装ros-melodic-jsk-recognition-msgs等依赖库 sudo apt-get ...
- svg 读取SVG文件并绘制矩形框选择图元
首先是SVG文件,里面包含了几个不同的图元: <?xml version='1.0' standalone='no'?> <!DOCTYPE svg PUBLIC "-// ...
- 关于矩形的边框,以及边框线偶尔不显示的问题
关于矩形的边框,以及边框线偶尔不显示的问题 组件设置边框,是基于四个顶点/四条边,同步向内和向外延展的矩形环形区域!并且很可能会被布局给遮挡,当布局之间不留间隙时!这就会导致出现四边某一边突然没有边框 ...
- opencv方框内图像保存_opencv利用矩形框选中某一区域并保存为新图片
本文实例为大家分享了Android九宫格图片展示的具体代码,供大家参考,具体内容如下 一.基本原理 Mat img= imread(image): Rect rect(50,20, 200, 50); ...
最新文章
- python算法书pdf_Python算法很难吗?python神书《算法图解》PDF电子版分享给你!
- R语言使用caret包构建随机森林模型(random forest)构建回归模型、通过method参数指定算法名称、通过ntree参数指定随机森林中树的个数
- python面向对象之方法
- 关于MVC4项目从32位机移到64位机编译报错解决方案
- 数组字符串转化成数组与eval函数
- python中space_漫谈Python的Namespace
- 一文带你读懂单目视觉SLAM数据关联优化
- 你爱我,我爱你,IP被封很头疼【Python爬虫实战:ip代理js逆向采集】
- Qt之Dialog\widget\ mainwindow的区别和布局管理器 分裂器的区别
- UE4 植被工具的使用
- Python爬虫实战|爬取视频
- BZOJ2434【NOI2011】阿狸的打字机 AC自动机+Fail树+树状数组
- html 中图片显示不了,css中不显示图片怎么办
- Codeforces_714_A
- NodeBB论坛搭建
- GPU和CPU芯片区别:为何要用GPU挖矿?
- 哪个牌子的蓝牙耳机音质好?公认音质最好的真无线耳机推荐
- BZOJ2456mode
- Graphviz绘制链表
- 电话机器人是如何筛选意向客户的