Node.js 調用OpenCV 讀取圖像數據矩陣


Node.js 調用OpenCV 讀取圖像數據矩陣

最近在做一個feature,在地圖中布置道具,想法是可以繪制任意圖像曲線的軌跡,思路是,讀取一個圖像,二值化,根據地圖中需要的長寬,縮放圖像,然后將圖像轉化為二維數組做為繪制圖像的數據源。

這里要用到幾個圖像處理的操作,所以查找了下當前的圖像處理庫,覺得OpenCV是個不錯的選擇,而且由於新版本的openCV是用C++編寫,很多git上的開源項目將opencv封裝后給javascript調用,我用的是node-opencv

讀取圖像矩陣這事,其實我試了好幾天,熬得昏天暗地沒啥好結果。。。其實這是我很不好的一個習慣,啥事不喜歡看書和深入點查資料,喜歡亂試,昨天和老婆逛街到書店里偶然看到了一本openCV的書,我一看我去這不是我想要的嘛!趕緊手機拍了張照。。。(感謝老婆帶我去逛書店,還是得多讀書呀!!):

其實圖像文件除了像素信息還存儲了很多數據,我需要的,只是像素信息,那么首先要知道圖像的通道是多少,像灰度圖,它的通道是1,常用的RBG圖,通道就是3, 也就是說,一個100100的圖像,每一行,其實是有1003個項,就是說,每一個像素,存儲了R,G,B三個像素的信息。

知道了這些信息,事情就好辦多了,下邊是我是用node-opencv寫的代碼:

    function BinaryArrayFromImage(imagePath, width, height)
    {
    var cv = require('../opencv/lib/opencv');
    cv.readImage(imagePath, function(err, im) {
      if (err) throw err;
      var w = im.width();
      var h = im.height();
      if (w < 1 || h < 1) throw new Error('Image has no size');
    
      var binaryImage = im.threshold(200, 255, "Binary");
      console.log("image converted to binary image");
      
      binaryImage.resize(width,height);
      
      //  binaryImage.convertGrayscale();
      console.log(binaryImage.channels());
    
       var imageMatrix = new Array();
    
       for(i=0;i<height;i++)
       {
       imageMatrix[i] = new Array();
       var index = 0;
       for(j=0;j<width*3;j+=3)
       {
       if(binaryImage.pixelRow(i)[j]<100)
       {
       imageMatrix[i][index]=1;
       }
       else
       {
       imageMatrix[i][index]=0;
       }
       index++;
       }
       
       }
       binaryImage.save('./convertedImage.jpg');
    
       return imageMatrix;
    });
    }


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM