Javascript影像處理思路及實作程式碼_javascript技巧
HTML5的canvas提供了getImageData介面來取得canvas中的數據,所以我們能夠先用drawImage介面將圖片畫在canvas上然後再透過getImageData得到圖片資料矩陣。
需要注意,雖然IE9開始支持了canvas接口,但是其getImageData獲取的數據並不是以標準的TypedArray方式存儲的,或者說IE9沒有提供對WebGL Native binary data的支持,所以如果需要對IE9支持,下面的矩陣需要用Array的方式保存。雖然IE9以下版本(例如IE8)有開源專案explorercanvas提供canvas支持,但很可惜G_vmlCanvasManager並沒有提供點陣圖資料取得介面。 TypedArray的相關內容可以參考HTML5的新陣列
基本矩陣
在影像處理中,矩陣計算是非常重要的內容,所以我們首先來建立一個矩陣模型。
透過getImageData介面取得的ImageData雖然具有類似矩陣的結構,但是他的結構是不可變的,不適合擴展,所以我們選擇在Javascript中自建一個矩陣。
function Mat(__row, __col, __col, __buffer)
this.row = __row || 0;
this.col = __col || 0;
this.channel = 4;
this.buffer = __buffer || new ArrayBuffer(__row * __col * 4);
this.data = new Uint8ClampedArray(this.buffer);
__data && this.data.set(__data);
this.bytes = 1;
this.type = "CV_RGBA ";
}
row - 代表矩陣的行數
col - 代表矩陣的列數
channel - 代表通道數量,因為透過getImageData取得的圖片資料是以RGBA色彩空間進行描述的,即有Red(紅)、Green(綠)、Blue(藍)和Alpha(不透明度)四個通道。
buffer - 資料所用的ArrayBuffer引用。
data - 圖片的Uint8ClampedArray陣列資料。
bytes - 每個資料單位佔用位元組,因為是uint8資料類型,所以佔用位元組數為1。
type - 資料型態是CV_RGBA。
圖片資料轉成矩陣的方法
程式碼如下:
function read (__image){
var width = __image.width,
height = __image.height;
iResize(width, height);
iCtx.drawImage(__image, 0, 0); var imageData = iCtx.getImageData(0, 0, width, height),
tempMat = new Mat(height, width, imageData.data);
imageData = null;
iCtx.clearRect(0tx. , width, height);
}
程式碼如下:
var img = new Image();
img.onload = function(){
var myMat = cv.imread(img); 🎜>};
var iCanvas = document.createElement("canvas"),
iCtx = iCanvas.Context "2d");
function iResize(__width, __height){
iCanvas.width = __width;
iCanvas.height = __height;
讓我們來看看drawImage方法
:
用途
在canvas上繪製一張圖片。
語法
context.drawImage(img,x,y);
context.drawImage(img,x,y,width,height);
context.drawImage(img,sx,sy,swidthth,sy,swidth ,sheight,x,y,width,height);
範例
還有getImageData方法:
用途
取得canvas中的影像資料。
資料是以RGBA色彩空間回傳的,即:
R - 紅色通道大小
G - 綠色通道大小
B - 藍色通道大小
A - 不透明程度大小
語法
context.getImageData(x,y,width,height);
範例
複製程式碼
矩陣轉成影像資料的方法
經過處理後的矩陣,需要一個方法變成ImageData,然後我們就可以透過putImageData方法,在canvas上繪製經過處理的影像了。
function RGBA2ImageData(__imgidage __imgMat.col,
height = __imgMat.row,
imageData = iCtx.createImageData(width, height);
imageData.data.set(__imgMat.data)
}
: 用途透過影像數據,在canvas上繪製影像。
語法
context.putImageData(imgData,x,y,dirtyX,dirtyY,dirtyWidth,dirtyHeight);
將彩色圖轉換成灰階圖
最後我們進行一個簡單的色彩空間變換,將影像從RGBA轉成GRAY。
col = __src.col;
var dst = new Mat(row, col);
data = dst.data,
data2 = __src.data;
var pix1, pix2, pix = __src.row * __src.col * 4;
while (pix){
data[pix - = 4] = data[pix1 = pix 1] = data[pix2 = pix 2] = (data2[pix] * 299 data2[pix1] * 587 data2[pix2] * 114) / 1000;
data[pix 3 ] = data2[pix 3];
}
}else{
return src;
}
return dst;
}
}
}
參考OpenCV文件中的轉換公式: RGBA to Gray: Y Gray to RGBA: R 我們可以得到RGBA to GRAY(指的是擁有4個通道)對應映射關係應該為: RGBA to RGBA(GRAY): R1 = G1 = B1

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

熱門話題

Wasserstein距離,又稱EarthMover'sDistance(EMD),是一種用於測量兩個機率分佈之間差異的測量方法。相較於傳統的KL散度或JS散度,Wasserstein距離考慮了分佈之間的結構訊息,因此在許多影像處理任務中展現出更好的性能。透過計算兩個分佈之間的最小運輸成本,Wasserstein距離能夠測量將一個分佈轉換為另一個分佈所需的最小工作量。這種度量方法能夠捕捉到分佈之間的幾何差異,從而在影像生成、風格遷移等任務中發揮重要作用。因此,Wasserstein距離成為了概

VisionTransformer(VIT)是Google提出的一種基於Transformer的圖片分類模型。不同於傳統CNN模型,VIT將圖像表示為序列,並透過預測圖像的類別標籤來學習圖像結構。為了實現這一點,VIT將輸入影像劃分為多個補丁,並將每個補丁中的像素透過通道連接,然後進行線性投影以達到所需的輸入維度。最後,每個補丁被展平為單一向量,從而形成輸入序列。透過Transformer的自註意力機制,VIT能夠捕捉到不同補丁之間的關係,並進行有效的特徵提取和分類預測。這種序列化的影像表示方法為

超解析度影像重建是利用深度學習技術,如卷積神經網路(CNN)和生成對抗網路(GAN),從低解析度影像中生成高解析度影像的過程。該方法的目標是透過將低解析度影像轉換為高解析度影像,從而提高影像的品質和細節。這種技術在許多領域都有廣泛的應用,如醫學影像、監視攝影、衛星影像等。透過超解析度影像重建,我們可以獲得更清晰、更具細節的影像,有助於更準確地分析和識別影像中的目標和特徵。重建方法超解析度影像重建的方法通常可以分為兩類:基於插值的方法和基於深度學習的方法。 1)基於插值的方法基於插值的超解析度影像重

舊照片修復是利用人工智慧技術對舊照片進行修復、增強和改善的方法。透過電腦視覺和機器學習演算法,該技術能夠自動識別並修復舊照片中的損壞和缺陷,使其看起來更加清晰、自然和真實。舊照片修復的技術原理主要包括以下幾個面向:1.影像去雜訊和增強修復舊照片時,需要先進行去雜訊和增強處理。可以使用影像處理演算法和濾波器,如均值濾波、高斯濾波、雙邊濾波等,來解決雜訊和色斑問題,進而提升照片的品質。 2.影像復原和修復在舊照片中,可能存在一些缺陷和損壞,例如刮痕、裂縫、褪色等。這些問題可以透過影像復原和修復演算法來解決

C#開發中如何處理影像處理和圖形介面設計問題,需要具體程式碼範例引言:在現代軟體開發中,影像處理和圖形介面設計是常見的需求。而C#作為一種通用的高階程式語言,具有強大的影像處理和圖形介面設計能力。本文將以C#為基礎,討論如何處理影像處理和圖形介面設計問題,並給出詳細的程式碼範例。一、影像處理問題:影像讀取和顯示:在C#中,影像的讀取和顯示是基本操作。可以使用.N

Java開發:影像辨識與處理實務指南摘要:隨著電腦視覺和人工智慧的快速發展,影像辨識和處理在各個領域都發揮了重要作用。本文將介紹如何利用Java語言實現影像辨識和處理,並提供具體的程式碼範例。一、影像辨識的基本原理影像辨識是指利用電腦科技對影像進行分析與理解,從而辨識出影像中的物件、特徵或內容。在進行影像辨識之前,我們需要先了解一些基本的影像處理技術,如圖

PHP學習筆記:人臉辨識與影像處理前言:隨著人工智慧技術的發展,人臉辨識和影像處理成為了熱門話題。在實際應用中,人臉辨識與影像處理多用於安全監控、人臉解鎖、卡牌比對等方面。而PHP作為常用的伺服器端腳本語言,也可以用來實現人臉辨識與影像處理的相關功能。本篇文章將帶你了解PHP中的人臉辨識與影像處理,並附有具體的程式碼範例。一、PHP中的人臉辨識人臉辨識是一

尺度不變特徵變換(SIFT)演算法是一種用於影像處理和電腦視覺領域的特徵提取演算法。該演算法於1999年提出,旨在提高電腦視覺系統中的物體辨識和匹配性能。 SIFT演算法具有穩健性和準確性,被廣泛應用於影像辨識、三維重建、目標偵測、視訊追蹤等領域。它透過在多個尺度空間中檢測關鍵點,並提取關鍵點周圍的局部特徵描述符來實現尺度不變性。 SIFT演算法的主要步驟包括尺度空間的建構、關鍵點偵測、關鍵點定位、方向分配和特徵描述子產生。透過這些步驟,SIFT演算法能夠提取出具有穩健性和獨特性的特徵,從而實現對影像的高效
