2017-02-10 14 views
1

toBuffer()を使用してopenCv行列を変換しようとしていますが、var mat = new cv.Matrix()で作成した行列でうまく動作しますが、 cv.readImageを経て、toBufferは()ここでは、何も返さない私のコードは次のとおりです。それが可能だ場合Node.js、OpenCV toBuffer()関数を使って行列をバッファに変換しようとしています

var cv =require('opencv'); 
var output; 
var mat = new cv.Matrix(90,90); 
cv.readImage("mona0.png", function(err,im){ 
    if (err) throw err; 
    if (im.width() < 1 || im.height() < 1) throw new Error('Image has no size'); 

    im.bilateralFilter(); 
    console.log(im); 
    output = im.clone(); 
    }); 
var buff = mat.toBuffer();// it works and returns something like <buffer ff d8 ff...> 
//var buff = output.toBuffer(); // it doesn't work and returns nothing 
console.log(buff); 

だから、私はmat

からの出力に似imからの出力を取得したいと思い、事前にありがとうございます。 (


は、私はあなたが提案したコードを試みたが、それはconsole.log('mat'+buff1)のresoultがoutputまで表示されませんので、それは動作を停止し.toBuffer関数を呼び出した後のように思えるので、私はバッファオブジェクトに何かを変換する方法を発見しましたコードは以下です)、このようにして行列の内容ではなく、 '[Matrix 756 * 500]'という文字列を変換します。var buff = new Buffer(output);を文字列に変換せずに実行しようとすると便利かもしれない別のヒントがありますそのoutputは文字列または配列でなければなりません。今ではoutputを配列に変換しようとしています。もう1つのことがあります:.toBufferAsync()が必要ですが、1つの引数が必要です。

var cv =require('opencv'); 
var fs = require('fs'); 
var mat = new cv.Matrix(90,90); 
cv.readImage("mona0.png", function(err,im){ 
    if (err) throw err; 
    if (im.width() < 1 || im.height() < 1) throw new Error('Image has no size'); 

    im.bilateralFilter(); 
    console.log(im); 
    var output = new cv.Matrix(im.width(),im.height()) 
    output = im.clone(); 
    var buff = new Buffer(output.toString('byte64')); // it should work now 
    console.log('this is buff: '); 
    console.log(buff); 
    }); 
var buff1 = new Buffer(mat.toString('byte64'));// it works and returns something like <buffer ff d8 ff...> 
console.log('this is buff1: ') 
console.log(buff1) 

答えて

0

私はそれがcv.readImage()が忠実なプロセスであると信じています。

output.toBuffer()は、cv.readImageが画像の読み取りを終了する前に評価されているであろう。

つまり... var buff = output.toBuffer();を移動してみてください、あなたはアウトを置く見ることができるかどうかを確認:ちなみに

var cv =require('opencv'); 
var output; 
var mat = new cv.Matrix(90,90); 
cv.readImage("mona0.png", function(err,im){ 
    if (err) throw err; 
    if (im.width() < 1 || im.height() < 1) throw new Error('Image has no size'); 

    im.bilateralFilter(); 
    console.log(im); 
    output = im.clone(); 
    var buff = output.toBuffer(); // it should work now 
    console.log('output'+buff) 
    }); 
var buff1 = mat.toBuffer();// it works and returns something like <buffer ff d8 ff...> 
console.log('mat'+buff1) 

は、ログが表示されるはずです:

マットBUFF1

出力BUFF

非同期性の結果として、

となります。

編集:小修正

関連する問題