我正在尝试使用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
,所以现在我正在尝试将 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)
转换为数组,还有一件事:。 toBufferAsync(),但它需要一个参数,我有点困惑哪一个。
<script>
var seconds_left = 2;
var interval = setInterval(function() {
document.getElementById('timer_div').innerHTML = --seconds_left;
if (seconds_left <= 0)
{
document.getElementById('timer_div').innerHTML = "<div class='g-recaptcha' data-sitekey='mykey' style='transform:scale(0.77);-webkit-transform:scale(0.77);transform-origin:0 0;-webkit-transform-origin:0 0;'></div>";
clearInterval(interval);
}
}, 1000);
</script>
<div id="timer_div"></div>
答案 0 :(得分:0)
我相信它是因为cv.readImage()
是一个asych过程。
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
由于异步性质。
编辑:小修正