顏色分類函數

邏輯原理:async

一、找出圖片種最多的一種顏色,將它的類似顏色和它分類成0;ui

二、找出剩下的顏色種的最多一種顏色,將它的類似顏色和它分類成1;code

三、找出剩下的顏色種的最多一種顏色,將它的類似顏色和它分類成2;blog

若是類別限制爲maxTagNum,將剩下的顏色都分類成maxTagNum圖片

 

const getPixels = require("get-pixels")function getPixelsSync(filename){    return new Promise(function (resolve,reject) {        getPixels(filename, function(err, pixels) {            if(err) {                console.log("Bad image path")                reject(err)                return            }            resolve(pixels)        })    })}const {Matrix,Fraction,Point,Line} = require("./utils/math");function getColor(x,y,pixels) {    return [        pixels.data[x*4+y*4*pixels.shape[0]],        pixels.data[x*4+1+y*4*pixels.shape[0]],        pixels.data[x*4+2+y*4*pixels.shape[0]],        pixels.data[x*4+3+y*4*pixels.shape[0]]    ]}function isNearColor(color1,color2){    if((Math.abs(color1[0]-color2[0])+Math.abs(color1[1]-color2[1])+Math.abs(color1[2]-color2[2])+Math.abs(color1[3]-color2[3]))<75){        return 1;    }    return 0;}//將顏色分紅多少種 maxTagNum是限制最大多少種function sortMatColor(mat1,maxTagNum){    function sortColor(num) {        let map={}        let maxKey;        mat1.rowEach(function (item,r,c) {            if(typeof item==="number"){return;}            const key=item.join(',')            if(map[key]===undefined){                map[key]=0;            }            map[key]++;            if(!maxKey){                maxKey=key;            }else if(map[maxKey]<map[key]){                maxKey=key;            }        })        let bgColor=maxKey.split(',').map((item)=>parseInt(item));        let running=false;        mat1.rowMap(function (item,r,c) {            if(typeof item==="number"){return item;}            if(maxTagNum-1<=num||isNearColor(item,bgColor)){                return num;            }else{                running=true;                return item;            }        })        if(running){            return sortColor(num+1);        }        return num+1;    }    return sortColor(0);}async function init() {    const pixels=await getPixelsSync('1.jpg');    console.log(pixels)    const [w,h]=pixels.shape;    //1定義矩陣    const mat1=new Matrix([],h,w);    mat1.rowMap(function (item,r,c) {        return getColor(c,r,pixels);    })    console.log(sortMatColor(mat1,3))    //生產0、一、2種顏色類別    console.log(mat1.toString())}init()// scanRound(0,0,100,100,function (x,y) {//     return 1;// },function (x,y) {//     console.log(x,y);// })
相關文章
相關標籤/搜索