0
我试图加载了很多这是在CVS文件中所列的以下格式加载图像与OpenCV的图像列表:在Node.js的
./path/to/img1.ext;label1
./path/to/img2.ext;label2
这是我的脚本写:
var cv = require("opencv"),
fs = require("fs"),
console = require("console"),
util = require("util"),
lazy = require("lazy.js");
var basePath = '/some/path/';
var csvFile = fs.createReadStream(basePath + 'db.csv', {flags:'r'});
var images = [],
labels = [];
lazy(csvFile)
.lines()
.each(function(l) {
var d = lazy(l).split(';').toArray();
cv.readImage(basePath + d[0], function(e, m) {
images.push(m);
});
labels.push(d[1]);
});
console.log(util.inspect(images));
console.log(util.inspect(labels));
它打印含有一个空数组[]
的表示两个线路。
的图像实际上是过得去OpenCV的加载,因为如果你试图将其推入阵列之前打印m
它正确打印[Matrix HxW ]
,其中H
和W
代表的高度和图像的宽度。
编辑:另外,你可以想到一个更好的方式比2分离数组保持每个图像与其标签相关联?
编辑:问题似乎是图像加载异步。所以问题在于我缺乏异步编程的经验。我该如何做这项工作?
你尝试过这个库的节点? https://github.com/caolan/async – gabereal 2014-09-18 19:04:22
@gabereal:应该怎样帮助我? – 2014-09-18 19:09:25
你可以延迟每个循环的迭代,直到readImage(我从你的第二次编辑中假定是异步部分)回调完成执行。有什么好的理由使用懒惰?我不明白你为什么不使用'fs'和'readline'节点模块... – gabereal 2014-09-18 20:09:37