当前位置: 首页 > 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);

相关文章:

fabricjs 实现图像的二值化功能

一、效果图 二、图像二值化的作用 二值化是图像处理中常用的一种方法&#xff0c;其作用是将灰度图像转换为二值图像&#xff0c;即将图像中的像素点根据其灰度值分成两类&#xff1a;黑色和白色。这种处理方法可以帮助我们更清晰地识别图像中的目标&#xff0c;简化图像的复杂…...

修改本地hosts文件及外部访问机器本地hosts文件后,rancher UI网站仍然不能访问

原因排查 kubectl get svc # 输出&#xff1a; NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 4d17hkubectl get svc -A # 输出&#xff1a; NAMESPACE …...

西北潮榆林范儿,新榆林首个360°沉浸式剧场发布会闪耀亮相

这是一场城市更迭的未来大赏&#xff0c;也是一场商业蝶变的复合对话 8月3日&#xff0c;朗阁集团商业品牌发布会在榆林银杏熙悦酒店隆重启幕。朗阁集团董事长杨志成携众多集团领导出席&#xff1b;多家主流媒体代表联袂参加&#xff1b;喜茶、中影时光国际影城、汉堡王、鲍师傅…...

如何创建响应式移动端网页设计?最佳实践详解

移动端网页设计是一个耗时而复杂的过程开发&#xff0c;包括UI设计、UX设计、检测、发布、改进、维护和持续的错误修复。通过学习这篇文章&#xff0c;你将掌握什么是移动端网页&#xff0c;如何制作移动端网页&#xff0c;以及设计网页的技巧。 什么是移动端网页&#xff1f;…...

Python 如何进行Web抓取(BeautifulSoup, Scrapy)

Web抓取&#xff08;Web Scraping&#xff09;是一种从网站提取数据的技术。Python有许多用于Web抓取的库&#xff0c;其中最常用的是BeautifulSoup和Scrapy。 BeautifulSoup BeautifulSoup是一个用于解析HTML和XML文档的Python库&#xff0c;适合处理简单的Web抓取任务。它将…...

白骑士的PyCharm教学进阶篇 2.5 数据库连接与管理

系列目录 上一篇&#xff1a;白骑士的PyCharm教学进阶篇 2.4 Django开发支持 在Web开发中&#xff0c;数据库是必不可少的部分。PyCharm不仅是一款功能强大的IDE&#xff0c;还提供了丰富的数据库连接和管理工具&#xff0c;使开发者可以更方便地浏览和操作数据库。本篇将详细…...

(五)activiti-modeler 编辑器初步优化

最终效果&#xff1a; 1..首先去掉顶部的logo&#xff0c;没什么用&#xff0c;还占用空间。 修改modeler.html文件&#xff0c;添加样式&#xff1a; <style type"text/css"> #main-header{display: none; } #main{padding: 0px; } </style> 2.左边组…...

(学习总结12)C++类和对象3

C类和对象3 一、初始化列表二、类型转换三、static成员四、友元五、内部类六、匿名对象 以下代码环境在 VS2022。 一、初始化列表 之前我们实现构造函数时&#xff0c;初始化成员变量主要使用函数体内赋值&#xff0c;构造函数初始化还有⼀种方式&#xff0c;就是初始化列表&a…...

docxtpl,一个强大的 Python 库!

更多资料获取 &#x1f4da; 个人网站&#xff1a;ipengtao.com 大家好&#xff0c;今天为大家分享一个强大的 Python 库 - docxtpl。 项目地址&#xff1a;https://docxtpl.readthedocs.io/en/latest/ 在日常工作中&#xff0c;自动生成和处理 Word 文档是一个常见需求。doc…...

捷途山海T2:超长续航,节能环保的驾驶新星

在当今的汽车市场中&#xff0c;消费者的购车选择日趋多样化&#xff0c;不再仅限于传统的燃油车。随着环保理念的深入人心以及人们对用车成本的日益关注&#xff0c;像捷途山海T2这样配备高效混动系统的车型逐渐受到大众的青睐。 捷途山海T2&#xff0c;以其杰出的节能性、强劲…...

[Day 45] 區塊鏈與人工智能的聯動應用:理論、技術與實踐

區塊鏈的可擴展性挑戰 概述 區塊鏈技術在過去幾年中取得了顯著的進展&#xff0c;其去中心化、透明和安全的特性使其在金融、供應鏈管理、醫療等領域得到了廣泛應用。然而&#xff0c;區塊鏈技術的一個重大挑戰是其可擴展性。可擴展性是指系統能夠有效處理日益增長的數據和用…...

白骑士的PyCharm教学实战项目篇 4.3 自动化测试与持续集成

系列目录 上一篇&#xff1a; 在现代软件开发过程中&#xff0c;自动化测试与持续集成&#xff08;CI&#xff09;是确保代码质量和快速交付的关键环节。PyCharm作为一款强大的集成开发环境&#xff08;IDE&#xff09;&#xff0c;为自动化测试和持续集成提供了全面的支持。本…...

权限模块开发+权限与角色关联(完整CRUD)

文章目录 &#x1f31e; Sun Frame&#xff1a;SpringBoot 的轻量级开发框架&#xff08;个人开源项目推荐&#xff09;&#x1f31f; 亮点功能&#x1f4e6; spring cloud模块概览常用工具 &#x1f517; 更多信息1.easycode生成代码1.配置2.AuthPermissionDao.java剪切到mapp…...

llama神经网络的结构,llama-3-8b.layers=32 llama-3-70b.layers=80; 2000汉字举例说明

目录 llama-3-8b.layers=32 llama-3-70b.layers=80 llama神经网络的结构 Llama神经网络结构示例 示例中的输入输出大小 实际举例说明2000个汉字文本数据集 初始化词嵌入矩阵 1. 输入层 2. 嵌入层 3. 卷积层 4. 全连接层 llama-3-8b.layers=32 llama-3-70b.laye…...

单细胞数据怎么表现genes mRNA表达的热图?

愿武艺晴小朋友一定得每天都开心 #热图 library("ComplexHeatmap") exp <- AverageExpression(subset(fasting_memory, Celltype %in% c("Pre-B")), layer = "data", #即CPM值 features …...

Java聚合快递对接云洋系统小程序源码

&#x1f680;【物流新纪元】聚合快递如何无缝对接云洋系统&#xff0c;效率飙升秘籍大公开&#xff01;✨ &#x1f50d; 开篇揭秘&#xff1a;聚合快递的魅力所在 Hey小伙伴们&#xff0c;你是否还在为多家快递公司账号管理繁琐、订单处理效率低下而头疼&#xff1f;&#…...

MySQL——数据表的基本操作(三)修改数据表

有时候&#xff0c;希望对表中的某些信息进行修改&#xff0c;这时就需要修改数据表。所谓修改数据表指的是修改数据库中已经存在的数据表结构&#xff0c;比如&#xff0c;修改表名、修改字段名、修改字段的数据类型等。在 MySQL中&#xff0c;修改数据表的操作都是使用 ALTER…...

医学图像分割的基准:TransUnet(用于医学图像分割的Transformer编码器)器官分割

1、 TransUnet 介绍 TransUnet是一种用于医学图像分割的深度学习模型。它是基于Transformer模型的图像分割方法&#xff0c;由AI研究公司Hugging Face在2021年提出。 医学图像分割是一项重要的任务&#xff0c;旨在将医学图像中的不同结构和区域分离出来&#xff0c;以便医生可…...

java-swing编写学生成绩查询管理系统

本文是本人大二上实训项目-学生成绩查询管理系统&#xff0c;采用本项目使用Java、MySQL技术。界面框架由Java Swing搭建&#xff0c;用JDBC实现Java与MySQL的连接。 本项目适合初学java和mysql的同学&#xff0c;来做一些小项目来提升自己&#xff0c;因为兴趣所以想要做去尝…...

volatile浅解

volatile修饰的变量有两个特点 线程中修改了自己工作内存中的副本后&#xff0c;立即将其刷新到主内存工作内存中每次读取共享变量时&#xff0c;都会去主内存中重新读取&#xff0c;然后拷贝到工作内存 内存 -> CPU Cache -> CPU 如果没有volatile那么就会继续读取缓存…...

群晖 /dev/md0 根分区爆满 100% 排查清理全流程

解决群辉系统爆满安装不了套件 一、群辉安装套件报错 报错&#xff1a;系统分区的可用空间不足&#xff0c;请联络Synology支持小组来寻求帮助。这是因为系统分区&#xff08;System Partition&#xff09;空间不足&#xff0c;导致无法解压和安装该套件。与磁盘硬盘大小没有关…...

实时操作系统(RTOS)核心特性与工业实践解析

1. 实时操作系统核心特性解析实时操作系统&#xff08;RTOS&#xff09;的核心设计理念在于"确定性响应"&#xff0c;这与我们日常使用的通用操作系统有着本质区别。我曾参与过工业控制系统的开发&#xff0c;深刻体会到RTOS在关键任务场景下的不可替代性。以数控机床…...

智慧微电网设计模拟:最优光储配置一键生成

在新能源渗透率持续提升的背景下&#xff0c;智慧微电网作为分布式能源利用的核心载体&#xff0c;其光储配置的合理性直接决定能源利用效率与经济效益。传统配置设计依赖人工测算&#xff0c;存在耗时久、参数匹配度低、优化空间有限等问题&#xff0c;而智慧微电网设计模拟系…...

Python爬虫实战:用Requests+Pandas批量抓取东方财富网全板块股票数据(附完整源码)

Python爬虫实战&#xff1a;构建东方财富网股票数据自动化采集系统 在金融数据分析领域&#xff0c;获取全面、准确的股票市场数据是量化交易、投资研究和市场监控的基础。对于Python开发者而言&#xff0c;如何高效地从东方财富网这类金融门户批量获取全板块股票数据&#xff…...

颈椎病反复复发?终于找到根源解决办法

颈椎疼治好了又犯&#xff0c;花钱不少、遭罪不少&#xff0c;到底为啥&#xff1f;核心就两点&#xff1a;只止疼不修病灶、纤维环破裂没修复。 普通治疗只能暂时推开压迫&#xff0c;髓核还会再次突出&#xff0c;神经反复受刺激&#xff0c;酸痛麻木永远断不了根。长春颈椎腰…...

从选工具到提交论文降AI率全流程避坑指南

把降AI率的整个流程从头到尾捋一遍——从第一次知网检测发现超标&#xff0c;到最终论文成功提交&#xff0c;每一步该干什么&#xff0c;常见问题怎么处理。 这是一篇流程性的指南&#xff0c;适合第一次处理论文AI率的同学从头读&#xff0c;也适合某个步骤卡住了来查的。 …...

霞鹜文楷屏幕阅读版:2025年最佳屏幕阅读字体解决方案

霞鹜文楷屏幕阅读版&#xff1a;2025年最佳屏幕阅读字体解决方案 【免费下载链接】LxgwWenKai-Screen LXGW WenKai for Screen Reading. 项目地址: https://gitcode.com/gh_mirrors/lx/LxgwWenKai-Screen 还在为长时间盯着屏幕阅读而感到眼睛疲劳吗&#xff1f;&#x1…...

Attu可视化工具:向量数据库性能监控与运维效率提升实践

Attu可视化工具&#xff1a;向量数据库性能监控与运维效率提升实践 【免费下载链接】attu The Best GUI for Milvus 项目地址: https://gitcode.com/gh_mirrors/at/attu Attu作为Milvus向量数据库的图形化管理界面&#xff0c;通过系统监控工具、性能分析仪表盘和可视化…...

三维激光熔覆模拟技术:精准控制、高效制造的数字化解决方案

三维激光熔覆模拟最近在车间里看到工程师们调试激光熔覆设备时&#xff0c;我突然意识到这玩意儿和3D打印机完全不是一个难度级别——金属粉末被激光瞬间融化又凝固的过程&#xff0c;简直就是微观层面的魔法表演。今天咱们就来扒一扒这个魔法背后的代码咒语。先看这个温度场模…...

低成本GPU算力方案:MT5中文文本增强镜像在RTX3060上高效部署实录

低成本GPU算力方案&#xff1a;MT5中文文本增强镜像在RTX3060上高效部署实录 你是不是也遇到过这样的烦恼&#xff1f;手头有一些中文文本数据&#xff0c;想用来训练模型&#xff0c;但数量太少&#xff0c;模型总是学不好。或者&#xff0c;你写了一段文案&#xff0c;想看看…...