在 Node.js 中使用 OpenCV 加载图像列表
Loading a list of images with OpenCV in Node.js
我正在尝试加载大量图像,这些图像以以下格式列在CVS文件中:
./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个单独的数组更好的方法来保持每个图像与其标签相关联吗?
编辑:问题似乎是图像是异步加载的。所以问题是我缺乏异步编程的经验。我怎样才能做到这一点?
这里有一个使用管道和CSV2和THROUGH2库的节点解决方案,你可以在这里找到 https://github.com/rvagg/csv2,在这里 https://github.com/rvagg/through2
我使用 setTimeout 使用模拟异步函数对此进行了测试,它奏效了。 但是,因为我没有您的数据文件,所以我无法准确测试它。 如果有问题,请告诉我。
注意,我创建了一个对象数组。 每个对象都有图像及其标签。 我认为这是比尝试保留具有这些关联的两个数组更好的解决方案。 通常,如果您需要与数据建立关系,则一个对象将优于两个数组:)
var fs = require('fs');
var files = [];
var file = fs.createReadStream('test.txt');
var csv2 = require('csv2');
var th2 = require('through2');
var cv = require('opencv');
file
.pipe(csv2({'separator': ';'})).pipe(th2({objectMode: true},function(parsedLine, enc, callback){
var me = this;
cv.readImage(parsedLine[0], function(e, img) {
files.push({image: img, label: parsedLine[1]});
me.push(parsedLine);
callback();
});
}))
.on('data', function(data){/*do something with data if you want to*/})
.on('end', function(){console.log(files);});
相关文章:
- 如何使用url加载程序在webpack中导入多个图像
- 如何在生成下载文件时显示加载动画
- 有没有任何方法可以将控制器从文件加载到ui路由器$stateProvider中
- 无法在通过jQuery的ajax加载的页面中执行javascript
- Emberjs应用程序加载在除Index之外的所有路由上
- 在chrome.tabs.onCreated之后加载HTML页面
- 单击F5时如何停止页面加载
- HTML5音频加载和播放获胜'我不能在iPad上工作
- 跟踪在页面加载时应用内联样式的JavaScript
- 在使用Polymer'加载所有json文件后执行方法;s的核心ajax
- jQuery Lazy加载动画滚动
- Html页面上的多个Base64图像和平滑加载
- 如何创建带有插槽的vue js组件预加载程序
- Webpack/Rect:遵循egghead.io教程,但出现错误:您可能需要一个合适的加载程序来处理此文件类型
- 如何使该数据在所有元素中加载
- Chrome扩展没有't在重新加载之前考虑期权价值
- 使用javascript在Flash中加载外部图像
- Ajax文件加载和<输入>文件加载
- 使用javascript函数在页面初始化后加载jquery
- 在 Node.js 中使用 OpenCV 加载图像列表