首页 > 其他分享 >图像处理的实现与应用(TypeScript 版)

图像处理的实现与应用(TypeScript 版)

时间:2024-10-25 23:44:36浏览次数:1  
标签:canvas TypeScript const imageData height width 图像处理 应用 data

图像处理是现代技术中的重要应用之一,广泛用于图像分析、计算机视觉和人工智能。本文使用 TypeScript 编写一些图像处理的基本操作,包括灰度转换、去除边框、提取有效区域和图像分割等。这些操作基于 HTML5 Canvas,实现起来直观且高效。

环境准备
首先确保你有基础的 TypeScript 项目,项目中需要一个 HTML 文件和一个 TypeScript 文件。HTML 文件中的 Canvas 元素将用于显示图像:

html

Image Processing with TypeScript 在 TypeScript 中,我们将基于 Canvas 的图像处理操作写在 app.ts 文件中。

加载图像
首先在 Canvas 中加载图像:

typescript

const canvas = document.getElementById('imageCanvas') as HTMLCanvasElement;
const ctx = canvas.getContext('2d')!;

function loadImage(src: string): Promise {
return new Promise((resolve, reject) => {
const img = new Image();
img.src = src;
img.onload = () => {
canvas.width = img.width;
canvas.height = img.height;
ctx.drawImage(img, 0, 0);
resolve();
};
img.onerror = reject;
});
}
灰度转换
灰度转换是图像处理中最常用的操作之一。以下函数将图像转换为灰度:

typescript

function convertToGray(): void {
const imageData = ctx.getImageData(0, 0, canvas.width, canvas.height);
const data = imageData.data;

for (let i = 0; i < data.length; i += 4) {
    const gray = 0.3 * data[i] + 0.59 * data[i + 1] + 0.11 * data[i + 2];
    data[i] = data[i + 1] = data[i + 2] = gray;
}

ctx.putImageData(imageData, 0, 0);

}
去除图像边框
去除边框可以将图像的边界部分设置为白色:

typescript

function clearBorders(borderWidth: number): void {
const imageData = ctx.getImageData(0, 0, canvas.width, canvas.height);
const data = imageData.data;

for (let y = 0; y < canvas.height; y++) {
    for (let x = 0; x < canvas.width; x++) {
        if (x < borderWidth || y < borderWidth || x >= canvas.width - borderWidth || y >= canvas.height - borderWidth) {
            const index = (y * canvas.width + x) * 4;
            data[index] = data[index + 1] = data[index + 2] = 255;
        }
    }
}

ctx.putImageData(imageData, 0, 0);

}
提取有效区域
提取有效区域是为了找到图像中的主要内容区域。以下代码遍历图像,找到所有像素值低于灰度阈值的区域:

typescript

function getValidRegion(threshold: number): ImageData {
const imageData = ctx.getImageData(0, 0, canvas.width, canvas.height);
const data = imageData.data;

let minX = canvas.width, minY = canvas.height, maxX = 0, maxY = 0;

for (let y = 0; y < canvas.height; y++) {
    for (let x = 0; x < canvas.width; x++) {
        const index = (y * canvas.width + x) * 4;
        const gray = data[index];

        if (gray < threshold) {
            if (x < minX) minX = x;
            if (y < minY) minY = y;
            if (x > maxX) maxX = x;
            if (y > maxY) maxY = y;
        }
    }
}

const width = maxX - minX + 1;
const height = maxY - minY + 1;
return ctx.getImageData(minX, minY, width, height);

}
图像分割
图像分割将图像按行列切分为多个小块。以下代码实现水平和垂直分割:

typescript

function splitImage(rows: number, cols: number): ImageData[] {
const width = canvas.width / cols;
const height = canvas.height / rows;
const images: ImageData[] = [];

for (let row = 0; row < rows; row++) {
    for (let col = 0; col < cols; col++) {
        const imageData = ctx.getImageData(col * width, row * height, width, height);
        images.push(imageData);
    }
}

return images;

}
生成二进制编码
生成二进制编码串,可以将图像中的灰度值转换为二进制表示:

typescript

function generateBinaryCode(threshold: number): string {
const imageData = ctx.getImageData(0, 0, canvas.width, canvas.height);
const data = imageData.data;
let binaryCode = '';

for (let i = 0; i < data.length; i += 4) {
    binaryCode += data[i] < threshold ? '1' : '0';
}

return binaryCode;

}

标签:canvas,TypeScript,const,imageData,height,width,图像处理,应用,data
From: https://www.cnblogs.com/ocr1/p/18503450

相关文章

  • 图像处理的实现与应用(PHP 版)
    图像处理在网络应用中十分重要,常用于图像分析、数据处理和用户交互。本文将使用PHP实现一些基本的图像处理操作,包括灰度转换、去除边框、提取有效区域和图像分割。环境准备确保你的PHP环境已安装GD库,这是进行图像处理的核心扩展。以下示例假设你有一个基本的PHP服务器环......
  • 验证码图像处理(JavaScript 版)
    图像处理在现代网页应用中扮演着重要角色,常用于图像分析和用户交互。本文将使用JavaScript和HTML5Canvas实现一些基本的图像处理操作,包括灰度转换、去除边框、提取有效区域和图像分割。环境准备首先,确保你有一个基本的HTML文件,其中包含一个Canvas元素。以下是示例结构:......
  • 【移动应用开发】ContentProvider实现我的图书馆
    续上一篇博客【移动应用开发】Android持久化技术-CSDN博客目录一、具体步骤二、运行截图三、源代码1.在SharePreferences项目下新建一个DatabaseProvider2.在AndroidManifest.xml中声明权限和注册该provider3.新建一个名为ProviderTest的应用程序4.布局文件①act......
  • 【移动应用开发】界面设计(二)实现水果列表页面
    续上一篇博客【移动应用开发】界面设计(一)实现登录页面-CSDN博客目录一、采用ViewBinding实现一个RecyclerView1.1在app/build.gradle中添加recyclerview依赖,并打开viewBinding(1)在app/build.gradle中添加依赖(2)在app/build.gradle中打开viewBinding功能(3)点击同步Sync,同......
  • Python应用指南:地铁两站之间最短路径查询
    随着城市交通的发展,地铁已成为许多城市居民日常出行的重要方式之一。地铁网络的复杂性和站点数量的增加使得乘客在选择最佳路线时面临挑战。为了帮助乘客快速、准确地找到从起始站到目的站的最短乘坐线路,本篇文章我们来求一下地铁两站之间最短路径查询的查询,通过Python脚本快......
  • 如何在AWS上自动扩展Web应用
    摘要:AWS的自动扩展可以帮助您的Web应用根据实际使用量动态调整计算资源。这包括:1、监控流量及性能指标、2、设定弹性策略、3、配置启动模板、4、利用负载均衡器分配流量。其中,监控流量及性能指标是自动扩展的关键部分,AWS提供的CloudWatch服务能够实时监控应用程序的多个性能指标,这......
  • ava MyBatis 无参构造器的深度解析与应用
    JavaMyBatis无参构造器的深度解析与应用一、引言在Java开发领域,MyBatis作为一个优秀的持久层框架,以其灵活性和高效性赢得了广泛的认可。它简化了数据库操作的复杂性,使得开发者能够更加专注于业务逻辑的实现。而在MyBatis的使用过程中,无参构造器扮演着一个不可或缺的角色。本文将......
  • Docker 的应用场景在哪里
    Docker的主要应用场景包括:应用隔离、微服务架构、持续集成与部署(CI/CD)、开发测试环境的一致性、应用迁移和优化。开发人员和系统管理员使用Docker来避免环境差异带来的“在我机器上能运行”的问题。通过容器化,Docker改善了软件的发货速度、可靠性以及可移植性。尤其在微服务架......
  • 17-网络安全应急响应技术原理与应用
    17.1概述1)概念指为应对网络安全事件,相关人员或组织机构对网络安全事件进行监测、预警、分析、响应和恢复等工作。2)发展1988年,美国发生了“小莫里斯网络蠕虫”安全事件,导致上千台计算机受到了影响,促使美国政府成立了世界上第一个计算机安全应急组织CERT。目前,国内已经建立了......
  • 栈迁移原理及简单应用
    栈迁移stackoverflow这个漏洞根据是栈溢出的一个延申,一般进行栈溢出攻击时,会把要返回的地址(有用的地址)溢出到ret处,然后就能控制流程甚至时getshell,但是有时候我们溢出的空间不够,够不到ret(或者栈空间不够存储参数)栈迁移的核心思想就是将栈上的ebp和esp迁移到一个输入不受长度的......