国产99久久精品_欧美日本韩国一区二区_激情小说综合网_欧美一级二级视频_午夜av电影_日本久久精品视频

最新文章專題視頻專題問答1問答10問答100問答1000問答2000關(guān)鍵字專題1關(guān)鍵字專題50關(guān)鍵字專題500關(guān)鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關(guān)鍵字專題關(guān)鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
當(dāng)前位置: 首頁 - 科技 - 知識百科 - 正文

Javascript圖像處理—為矩陣添加常用方法_javascript技巧

來源:懂視網(wǎng) 責(zé)編:小采 時間:2020-11-27 21:06:17
文檔

Javascript圖像處理—為矩陣添加常用方法_javascript技巧

Javascript圖像處理—為矩陣添加常用方法_javascript技巧:前言 上一篇文章,我們定義了矩陣,這篇文章我們來給矩陣添加一些常用方法。 toString方法 toString方法通常用作將對象轉(zhuǎn)成字符串描述,所以我們將這一方法定義為輸出矩陣元素。 代碼如下: Mat.prototype.toString = function(){ var
推薦度:
導(dǎo)讀Javascript圖像處理—為矩陣添加常用方法_javascript技巧:前言 上一篇文章,我們定義了矩陣,這篇文章我們來給矩陣添加一些常用方法。 toString方法 toString方法通常用作將對象轉(zhuǎn)成字符串描述,所以我們將這一方法定義為輸出矩陣元素。 代碼如下: Mat.prototype.toString = function(){ var

前言
上一篇文章,我們定義了矩陣,這篇文章我們來給矩陣添加一些常用方法。

toString方法
toString方法通常用作將對象轉(zhuǎn)成字符串描述,所以我們將這一方法定義為輸出矩陣元素。
代碼如下:
Mat.prototype.toString = function(){
var tempData = this.data,
text = "Mat("+ this.type +") = {\n",
num = this.col * this.channel;
for(var i = 0; i < this.row; i++){
text += "["
for(var j = 0; j < num; j++){
text += (tempData[i * num + j] + ",");
}
text += "]\n";
}
text += "}";
return text;
};

這樣,我們就可以通過:
代碼如下:
console.log(mat);

來輸出矩陣了。

clone方法
實際上,我們可以通過構(gòu)造函數(shù)進(jìn)行克隆操作,不過依然提供一個方法來方便記憶、使用。
代碼如下:
Mat.prototype.clone = function(){
return new Mat(this.row, this.col, this.data);
};

獲取指定元素
我們有兩種方法獲取矩陣元素。

數(shù)組方法
由于實際上Mat是以數(shù)組形式保存數(shù)據(jù)的,而數(shù)據(jù)看起來是這樣的:
R00 G00 B00 A00 R01 G01 B01 A01 …… R0n G0n B0n A0n
R10 G10 B10 A10 R11 G11 B11 A11 …… R1n G1n B1n A1n
……
Rm0 Gm0 Bm0 Am0 Rm1 Gm1 Bm1 Am1 …… Rmn Gmn Bmn Amn
其中大寫R、G、B、A分別代表各通道的數(shù)值,而下標(biāo)第一個表示行號,第二個表示列號。即第k行,第j列的G通道數(shù)值就是Gkj。
我們很容易得到對于一個Mat類型的mat來說,第k行,第j列像素的每個元素分別是:
Rkj = mat.data[(k * mat.col + j) * 4 + 0]
Gkj = mat.data[(k * mat.col + j) * 4 + 1]
Bkj = mat.data[(k * mat.col + j) * 4 + 2]
Akj = mat.data[(k * mat.col + j) * 4 + 3]

Buffer部分引用方法
通過Buffer的部分引用,我們可以得到矩陣的部分引用,比如我們可以利用這個來獲取一個像素點的數(shù)據(jù)數(shù)組,而改變這個數(shù)組中的值,相應(yīng)的矩陣數(shù)據(jù)也會改變;再比如我們可以以其他數(shù)據(jù)類型的方式讀取數(shù)據(jù)。而這些對于普通Array是不能實現(xiàn)的。下面我們來看一下at方法的實現(xiàn):
代碼如下:
Mat.prototype.at = function(__type, __x, __y){
var type = __type,
x = __x || 0,
y = __y || 0,
rowLen = this.col * this.channel * this.bytes,
len = 1;
if(type.indexOf("Vec") > -1){
var temp = __type.match(/Vec(\d+)([a-z])/);
len = parseInt(temp[1]);
switch(temp[2]){
case "b":
type = "uchar";
break;
case "s":
type = "short";
break;
case "i":
type = "int";
break;
case "f":
type = "float";
break;
case "d":
type = "double";
break;
}
}
switch(type){
case "uchar":
return new Uint8Array(this.buffer, (y * rowLen + x), len);
break;
case "short":
return new Int16Array(this.buffer, (y * rowLen + x * 2), len);
break;
case "int":
return new Int32Array(this.buffer, (y * rowLen + x * 4), len);
break;
case "float":
return new Float32Array(this.buffer, (y * rowLen + x * 4), len);
break;
case "doulble":
return new Float64Array(this.buffer, (y * rowLen + x * 8), len);
break;
default:
console.error("不支持?jǐn)?shù)據(jù)類型");
}
};

如果你對ArrayBuffer和TypedArray還不太清楚,可以參考:HTML5 中的新數(shù)組。
String type - 需要返回的數(shù)據(jù)類型。支持:
uchar 無符號8位整數(shù)
short 有符號16位整數(shù)
int 有符號32位整數(shù)
float 有符號32位浮點數(shù)
double 有符號64位浮點數(shù)

Vec 向量形式
向量形式字符串拼寫是:Vec + (類型)+ (個數(shù)),例如Vecb4就是4個無符號8位整數(shù),這是常見的得到一個像素點數(shù)據(jù)的方法,例如為了得到mat第j行,第k列的像素數(shù)據(jù),可以使用:
代碼如下:
mat.at("Vecb4", j, k);

int x - 要獲取的元素在矩陣的行數(shù)。
int y - 要獲取的元素在矩陣的列數(shù)。

getRow方法和getCol方法
類似于at的實現(xiàn)方法,我們可以很容易寫出獲取某一行或者某一列的方法:
代碼如下:
Mat.prototype.getRow = function(__i){
var len = this.col * this.channel,
rowLen = len * this.bytes,
i = __i || 0;
return new this.data.constructor(this.buffer, i * rowLen, len);
};

代碼如下:
Mat.prototype.getCol = function(__i){
var len = this.col * this.channel,
rowLen = len * this.bytes,
array = [],
i = __i || 0;
function getAllElement(__constructor){
var row = this.row,
channel = this.channel;
for(var j = 0; j < row; j++){
array.push(new __constructor(this.buffer, j * rowLen + i, 1 * channel));
}
}
getAllElement(this.data.constructor);
return array;
};

rowRange和colRange方法
類似的,我們也可以得到指定行和指定列的方法:
代碼如下:
Mat.prototype.rowRange = function(__i, __j){
var len = this.col * this.channel,
rowLen = len * this.bytes,
array = [],
i = __i || 0,
j = __j || this.row;
function getAllElement(__constructor){
var row = this.row;
for(var k = i; k <= j; k++){
array.push(new __constructor(this.buffer, k * rowLen, len));
}
}
getAllElement(this.data.constructor);
return array;
};

代碼如下:
Mat.prototype.colRange = function(__i, __j){
var len = this.col * this.channel,
rowLen = len * this.bytes,
array = [],
i = __i || 0,
j = __j || this.col;
function getAllElement(__constructor){
var row = this.row
channel = this.channel;
for(var k = 0; k < row; k++){
array.push(new __constructor(this.buffer, k * rowLen + __i, (__j - __i + 1) * channel));
}
}
getAllElement(Float64Array);
return array;
};

這四種方法返回的都是一種Array的數(shù)組。如果要獲取這個數(shù)組rect第j行,第k列的元素,則可用:
rect[j][k]

聲明:本網(wǎng)頁內(nèi)容旨在傳播知識,若有侵權(quán)等問題請及時與本網(wǎng)聯(lián)系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

文檔

Javascript圖像處理—為矩陣添加常用方法_javascript技巧

Javascript圖像處理—為矩陣添加常用方法_javascript技巧:前言 上一篇文章,我們定義了矩陣,這篇文章我們來給矩陣添加一些常用方法。 toString方法 toString方法通常用作將對象轉(zhuǎn)成字符串描述,所以我們將這一方法定義為輸出矩陣元素。 代碼如下: Mat.prototype.toString = function(){ var
推薦度:
標(biāo)簽: 方法 矩陣 常用方法
  • 熱門焦點

最新推薦

猜你喜歡

熱門推薦

專題
Top
主站蜘蛛池模板: 亚洲国产精品一区 | 国产精品不卡 | 日日夜夜草 | 91福利国产在线观一区二区 | 成人欧美一区二区三区视频 | 日韩αv| 国语清晰对白声音刺激 | 欧美国产精品va在线观看 | 国产不卡一区二区视频免费 | 在线观看国产一区二区三区 | 国产成人精品久久一区二区小说 | 国产国拍亚洲精品永久不卡 | 国产精品一区二区久久精品 | 欧美不卡在线视频 | 92国产福利久久青青草原 | 成人毛片一区二区三区 | 国产在线精品一区二区夜色 | 欧美区一区二区三 | 精品国产自在在线在线观看 | 欧美亚洲一区二区三区在线 | 国产日韩视频在线 | 亚洲精品乱码久久久久久中文字幕 | 精品伊人久久大线蕉色首页 | 欧美日韩亚洲国产一区二区三区 | 国产精品视频久久久 | 成人国内精品久久久久影院 | 日韩 国产 欧美 精品 在线 | 国产精品久久久久久久 | 国产国产成人精品久久 | 亚洲欧美日韩国产色另类 | 国产日本在线观看 | 国产日韩在线观看视频网站 | 欧美a色爱欧美综合v | 黄色在线免费观看网址 | 亚洲 欧美综合小说区图片区 | 真实的国产乱xxxx在线 | 人与鲁牲交持级毛片 | 日本不卡视频在线观看 | 国产一级成人毛片 | 国产第八页 | 亚欧乱色视频网站大全 |