当前位置: 首页 > news >正文

fabricjs 实现图像的二值化功能

一、效果图

在这里插入图片描述

二、图像二值化的作用

二值化是图像处理中常用的一种方法,其作用是将灰度图像转换为二值图像,即将图像中的像素点根据其灰度值分成两类:黑色和白色。这种处理方法可以帮助我们更清晰地识别图像中的目标,简化图像的复杂度,提高图像的处理速度和准确性。

三、实现思路

1、获取框选的图片,进行截图

<div><canvasref="grayCanvas":width="canvasProp.width":height="canvasProp.height"></canvas><canvasref="binaryCanvas":width="canvasProp.width":height="canvasProp.height"></canvas></div><!-- 隐藏的 canvas --><canvasref="hiddenCanvas":width="canvasProp.width":height="canvasProp.height"style="display: none;"></canvas>// 根据框选的数据,对原图进行截图getCanvasImageData() {const viewportTransform = this.fabricCanvas.viewportTransform;const zoom = this.fabricCanvas.getZoom();let selectedCoords = null;this.fabricCanvas.getObjects().forEach(rect => {const coords = [];const points = rect.get("aCoords");Object.keys(points).forEach(key => {let point = points[key];const actualX = (point.x - viewportTransform[4]) / zoom;const actualY = (point.y - viewportTransform[5]) / zoom;coords.push([Math.round(actualX), Math.round(actualY)]);});// 假设只有一个矩形对象,我们只需获取一个对象的坐标selectedCoords = coords;});if (selectedCoords) {// 获取矩形区域的最小和最大坐标const minX = Math.min(...selectedCoords.map(coord => coord[0]));const minY = Math.min(...selectedCoords.map(coord => coord[1]));const maxX = Math.max(...selectedCoords.map(coord => coord[0]));const maxY = Math.max(...selectedCoords.map(coord => coord[1]));const width = maxX - minX;const height = maxY - minY;// 从隐藏的 canvas 中获取选中区域的图像数据const ctx = this.$refs.hiddenCanvas.getContext("2d");return ctx.getImageData(minX, minY, width, height);}return null;},

页面中要有3个canvas,grayCanvas 画灰度图片,binaryCanvas画二值化图片,hiddenCanvas 画原始的图片便于截图

2、对图片进行灰度处理
转化为灰度图片,放在灰度画布中

  convertToGrayScale(imageData) {const data = imageData.data;for (let i = 0; i < data.length; i += 4) {const avg = 0.3 * data[i] + 0.59 * data[i + 1] + 0.11 * data[i + 2];data[i] = avg;data[i + 1] = avg;data[i + 2] = avg;}return imageData;},applyGrayScale() {const imageData = this.getCanvasImageData();const grayImageData = this.convertToGrayScale(imageData);const grayCtx = this.$refs.grayCanvas.getContext("2d");grayCtx.putImageData(grayImageData, 0, 0);this.applyThreshold();},

3、拖动滑块,根据阈值对图片进行二值化处理

    applyThreshold() {const grayCtx = this.$refs.grayCanvas.getContext("2d");const grayImageData = grayCtx.getImageData(0,0,this.canvasProp.width,this.canvasProp.height);const data = grayImageData.data;for (let i = 0; i < data.length; i += 4) {const avg = data[i];const value = avg > this.threshold ? 255 : 0;data[i] = value;data[i + 1] = value;data[i + 2] = value;}const binaryCtx = this.$refs.binaryCanvas.getContext("2d");binaryCtx.putImageData(grayImageData, 0, 0);},

4、添加滑块移动的监听

   this.fabricCanvas.on("object:modified", this.applyGrayScale);this.fabricCanvas.on("object:added", this.applyGrayScale);this.fabricCanvas.on("object:removed", this.applyGrayScale);
http://www.lryc.cn/news/415302.html

相关文章:

  • 修改本地hosts文件及外部访问机器本地hosts文件后,rancher UI网站仍然不能访问
  • 西北潮榆林范儿,新榆林首个360°沉浸式剧场发布会闪耀亮相
  • 如何创建响应式移动端网页设计?最佳实践详解
  • Python 如何进行Web抓取(BeautifulSoup, Scrapy)
  • 白骑士的PyCharm教学进阶篇 2.5 数据库连接与管理
  • (五)activiti-modeler 编辑器初步优化
  • (学习总结12)C++类和对象3
  • docxtpl,一个强大的 Python 库!
  • 捷途山海T2:超长续航,节能环保的驾驶新星
  • [Day 45] 區塊鏈與人工智能的聯動應用:理論、技術與實踐
  • 白骑士的PyCharm教学实战项目篇 4.3 自动化测试与持续集成
  • 权限模块开发+权限与角色关联(完整CRUD)
  • llama神经网络的结构,llama-3-8b.layers=32 llama-3-70b.layers=80; 2000汉字举例说明
  • 单细胞数据怎么表现genes mRNA表达的热图?
  • Java聚合快递对接云洋系统小程序源码
  • MySQL——数据表的基本操作(三)修改数据表
  • 医学图像分割的基准:TransUnet(用于医学图像分割的Transformer编码器)器官分割
  • java-swing编写学生成绩查询管理系统
  • volatile浅解
  • 世媒讯带您了解什么是媒体邀约
  • [Kimi 笔记]“面向搜索引擎”
  • 如何在亚马逊云科技AWS上利用LoRA高效微调AI大模型减少预测偏差
  • 订单定时状态处理业务(SpringTask)
  • STM32 | ADC+RS485(第十天)
  • python打包成能够在mac里面运行的程序
  • 基于FPGA的数字信号处理(20)--半减器和全减器
  • Python:单引号,双引号,三引号的区别
  • 电子电气架构 ---SOMEIP/SD初入门
  • 一些数学基础概念
  • 责任有限公司的一般组织结构