我正在尝试使用toBuffer()
转换openCv矩阵,它可以与我通过var mat = new cv.Matrix()
创建的矩阵一起正常工作,但是当我对通过cv.readImage
打开的图像执行相同操作时,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);
所以,如果可能的话,我想从
im
获取输出,类似于从mat
输出先感谢您。
我尝试了您建议的代码,并且在调用
.toBuffer
函数后似乎停止工作,因为console.log('mat'+buff1)
的结果未显示output,所以我找到了将某些内容转换为Buffer对象的方法(代码在下面),但是在这样,它会转换字符串'[Matrix 756 * 500]'而不是矩阵的内容,还有另一个技巧可能会有用,如果我尝试执行var buff = new Buffer(output);
而不转换为字符串,它说output
必须是字符串还是数组,所以现在我尝试将output
转换为数组,还有一件事:.toBufferAsync(),但它需要一个参数,而我对哪个参数感到有些困惑。 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)
最佳答案
我相信这是因为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)
顺便说一句,日志应显示:由于异步性质。
编辑:小改正
关于javascript - Node.js,OpenCV尝试使用toBuffer()函数将矩阵转换为缓冲区,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42169937/