Tag: image processing

如何使用Node.js比较两个图像

我正在寻找一种方法来比较两个图像,看看他们是多么相似。 使用谷歌search会产生大量的image processing结果(裁剪,重新resize等),但没有什么会做近似的图像比较。 有一个Node.js库,但它是0.0.1版本,依赖于各种第三方系统包,所以不稳定或便携。 沿着这些线路的东西: var imgComparator = require('some-awesome-image-comparator-module'); // result would be between 1.0 and 0.0, where 1.0 would mean exact match var result = imgComparator.compare('/path/to/image/1.png', '/path/to/image/2.png');

nodejs native c ++ npm模块内存错误,cairoimage processing

我一直在node-canvas上对TJ进行窃听,关于我正在编写和维护的一个节点模块的分支上加速的代码。 我发现Canvas.toBuffer()是要杀死我们的pipe道资源,并创build了一个替代scheme,只需从Canvas转换为图像,而无需通过PNG缓冲区/媒体url。 问题是cairo是一个神秘的野兽,并且在节点模块内部分配的内存还有一个额外的关注点,因为不能被v8版本获得GC'd。 我已经将正确的HandleScopes添加到访问V8数据的所有必需的函数中。 我能够在我的Mac安装程序(6.18)上testingCanvas.loadImage(image)方法数千次,以及在运行相同版本节点的ubuntu / production服务器上进行独立testing。 但是,当代码作为后台进程/服务器运行,并由Gearman协调时,我得到一些“有趣”的内存/段错误。 另外,我无法调用在node-canvas中定义的类中任何不在头文件中内联的方法 。 作为一个侧面问题创build其他节点模块可以依赖的常见本地源代码包的最佳方式是什么? 我已经尝试重新创build问题并使用gdb,node_g和所有使用符号和debugging标志构build的节点模块来运行它。 但是这个错误在源代码之外的一个lib中可以得到一个堆栈跟踪。 这里是我调用loadImageData的地方,虽然它在各种条件下在本地运行,但在我们的生产环境中,当仔细地将其放在一个框架服务器中时,它似乎是导致段错误(昨天花了一天的时间尝试gdb node_g我们的服务器代码,框架服务器被齿轮人拉开… TL; DR没有得到根本原因堆栈跟踪) https://github.com/victusfate/node-canvas/blob/master/src/Canvas.cc#L497 Handle<Value> Canvas::LoadImage(const Arguments &args) { HandleScope scope; LogStream mout(LOG_DEBUG,"node-canvas.paint.ccode.Canvas.LoadImage"); mout << "Canvas::LoadImage top " << LogStream::endl; Canvas *canvas = ObjectWrap::Unwrap<Canvas>(args.This()); if (args.Length() < 1) { mout << "Canvas::LoadImage Error requires one argument of Image type " << […]