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

JavaScript核心數據類型在瀏覽器和Node.js中一致,但處理方式和額外類型有所不同。 1)全局對像在瀏覽器中為window,在Node.js中為global。 2)Node.js獨有Buffer對象,用於處理二進制數據。 3)性能和時間處理在兩者間也有差異,需根據環境調整代碼。

JavaScriptusestwotypesofcomments:single-line(//)andmulti-line(//).1)Use//forquicknotesorsingle-lineexplanations.2)Use//forlongerexplanationsorcommentingoutblocksofcode.Commentsshouldexplainthe'why',notthe'what',andbeplacedabovetherelevantcodeforclari

Python和JavaScript的主要區別在於類型系統和應用場景。 1.Python使用動態類型,適合科學計算和數據分析。 2.JavaScript採用弱類型,廣泛用於前端和全棧開發。兩者在異步編程和性能優化上各有優勢,選擇時應根據項目需求決定。

選擇Python還是JavaScript取決於項目類型:1)數據科學和自動化任務選擇Python;2)前端和全棧開發選擇JavaScript。 Python因其在數據處理和自動化方面的強大庫而備受青睞,而JavaScript則因其在網頁交互和全棧開發中的優勢而不可或缺。

Python和JavaScript各有優勢,選擇取決於項目需求和個人偏好。 1.Python易學,語法簡潔,適用於數據科學和後端開發,但執行速度較慢。 2.JavaScript在前端開發中無處不在,異步編程能力強,Node.js使其適用於全棧開發,但語法可能複雜且易出錯。

javascriptisnotbuiltoncorc; sanInterpretedlanguagethatrunsonenginesoftenwritteninc.1)JavascriptwasdesignedAsignedAsalightWeight,drackendedlanguageforwebbrowsers.2)Enginesevolvedfromsimpleterterpretpretpretpretpreterterpretpretpretpretpretpretpretpretpretcompilerers,典型地,替代品。

JavaScript可用於前端和後端開發。前端通過DOM操作增強用戶體驗,後端通過Node.js處理服務器任務。 1.前端示例:改變網頁文本內容。 2.後端示例:創建Node.js服務器。

選擇Python還是JavaScript應基於職業發展、學習曲線和生態系統:1)職業發展:Python適合數據科學和後端開發,JavaScript適合前端和全棧開發。 2)學習曲線:Python語法簡潔,適合初學者;JavaScript語法靈活。 3)生態系統:Python有豐富的科學計算庫,JavaScript有強大的前端框架。


熱AI工具

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

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

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

SublimeText3 英文版
推薦:為Win版本,支援程式碼提示!

EditPlus 中文破解版
體積小,語法高亮,不支援程式碼提示功能

VSCode Windows 64位元 下載
微軟推出的免費、功能強大的一款IDE編輯器

Dreamweaver Mac版
視覺化網頁開發工具

Atom編輯器mac版下載
最受歡迎的的開源編輯器