# node-opencv
[![Build Status](https://secure.travis-ci.org/peterbraden/node-opencv.svg)](http://travis-ci.org/peterbraden/node-opencv)
[OpenCV](http://opencv.org) bindings for Node.js. OpenCV is
the defacto computer vision library - by interfacing with it natively in node,
we get powerful real time vision in js.
People are using node-opencv to fly control quadrocoptors, detect faces from
webcam images and annotate video streams. If you're using it for something
cool, I'd love to hear about it!
## Install
You'll need OpenCV 2.3.1 or newer installed before installing node-opencv.
## Specific for macOS
Install OpenCV using brew
```bash
brew install pkg-config
brew install opencv@2
brew link --force opencv@2
```
## Specific for Windows
1. Download and install OpenCV (Be sure to use a 2.4 version) @
http://opencv.org/releases.html
For these instructions we will assume OpenCV is put at C:\OpenCV, but you can
adjust accordingly.
2. If you haven't already, create a system variable called OPENCV_DIR and set it
to C:\OpenCV\build\x64\vc12
Make sure the "x64" part matches the version of NodeJS you are using.
Also add the following to your system PATH
;%OPENCV_DIR%\bin
3. Install Visual Studio 2013. Make sure to get the C++ components.
You can use a different edition, just make sure OpenCV supports it, and you
set the "vcxx" part of the variables above to match.
4. Download peterbraden/node-opencv fork
git clone https://github.com/peterbraden/node-opencv
5. run npm install
```bash
$ npm install opencv
```
## Examples
Run the examples from the parent directory.
### Face Detection
```javascript
cv.readImage("./examples/files/mona.png", function(err, im){
im.detectObject(cv.FACE_CASCADE, {}, function(err, faces){
for (var i=0;i<faces.length; i++){
var x = faces[i]
im.ellipse(x.x + x.width/2, x.y + x.height/2, x.width/2, x.height/2);
}
im.save('./out.jpg');
});
})
```
## API Documentation
### Matrix
The [matrix](http://opencv.jp/opencv-2svn_org/cpp/core_basic_structures.html#mat) is the most useful
base data structure in OpenCV. Things like images are just matrices of pixels.
#### Creation
```javascript
new Matrix(rows, cols)
```
Or if you're thinking of a Matrix as an image:
```javascript
new Matrix(height, width)
```
Or you can use opencv to read in image files. Supported formats are in the OpenCV docs, but jpgs etc are supported.
```javascript
cv.readImage(filename, function(err, mat){
...
})
cv.readImage(buffer, function(err, mat){
...
})
```
If you need to pipe data into an image, you can use an ImageDataStream:
```javascript
var s = new cv.ImageDataStream()
s.on('load', function(matrix){
...
})
fs.createReadStream('./examples/files/mona.png').pipe(s);
```
If however, you have a series of images, and you wish to stream them into a
stream of Matrices, you can use an ImageStream. Thus:
```javascript
var s = new cv.ImageStream()
s.on('data', function(matrix){
...
})
ardrone.createPngStream().pipe(s);
```
Note: Each 'data' event into the ImageStream should be a complete image buffer.
#### Accessing Data
```javascript
var mat = new cv.Matrix.Eye(4,4); // Create identity matrix
mat.get(0,0) // 1
mat.row(0) // [1,0,0,0]
mat.col(3) // [0,0,0,1]
```
##### Save
```javascript
mat.save('./pic.jpg')
```
or:
```javascript
var buff = mat.toBuffer()
```
#### Image Processing
```javascript
im.convertGrayscale()
im.canny(5, 300)
im.houghLinesP()
```
#### Simple Drawing
```javascript
im.ellipse(x, y)
im.line([x1,y1], [x2, y2])
```
#### Object Detection
There is a shortcut method for
[Viola-Jones Haar Cascade](http://docs.opencv.org/trunk/d7/d8b/tutorial_py_face_detection.html) object
detection. This can be used for face detection etc.
```javascript
mat.detectObject(haar_cascade_xml, opts, function(err, matches){})
```
For convenience in face detection, cv.FACE_CASCADE is a cascade that can be used for frontal face detection.
Also:
```javascript
mat.goodFeaturesToTrack
```
#### Contours
```javascript
mat.findCountours
mat.drawContour
mat.drawAllContours
```
### Using Contours
`findContours` returns a `Contours` collection object, not a native array. This object provides
functions for accessing, computing with, and altering the contours contained in it.
See [relevant source code](src/Contours.cc) and [examples](examples/)
```javascript
var contours = im.findContours();
// Count of contours in the Contours object
contours.size();
// Count of corners(verticies) of contour `index`
contours.cornerCount(index);
// Access vertex data of contours
for(var c = 0; c < contours.size(); ++c) {
console.log("Contour " + c);
for(var i = 0; i < contours.cornerCount(c); ++i) {
var point = contours.point(c, i);
console.log("(" + point.x + "," + point.y + ")");
}
}
// Computations of contour `index`
contours.area(index);
contours.arcLength(index, isClosed);
contours.boundingRect(index);
contours.minAreaRect(index);
contours.isConvex(index);
contours.fitEllipse(index);
// Destructively alter contour `index`
contours.approxPolyDP(index, epsilon, isClosed);
contours.convexHull(index, clockwise);
```
#### Face Recognization
It requires to `train` then `predict`. For acceptable result, the face should be cropped, grayscaled and aligned, I ignore this part so that we may focus on the api usage.
** Please ensure your OpenCV 3.2+ is configured with contrib. MacPorts user may `port install opencv +contrib` **
```javascript
const fs = require('fs');
const path = require('path');
const cv = require('opencv');
function forEachFileInDir(dir, cb) {
let f = fs.readdirSync(dir);
f.forEach(function (fpath, index, array) {
if (fpath != '.DS_Store')
cb(path.join(dir, fpath));
});
}
let dataDir = "./_training";
function trainIt (fr) {
// if model existe, load it
if ( fs.existsSync('./trained.xml') ) {
fr.loadSync('./trained.xml');
return;
}
// else train a model
let samples = [];
forEachFileInDir(dataDir, (f)=>{
cv.readImage(f, function (err, im) {
// Assume all training photo are named as id_xxx.jpg
let labelNumber = parseInt(path.basename(f).substring(3));
samples.push([labelNumber, im]);
})
})
if ( samples.length > 3 ) {
// There are async and sync version of training method:
// .train(info, cb)
// cb : standard Nan::Callback
// info : [[intLabel,matrixImage],...])
// .trainSync(info)
fr.trainSync(samples);
fr.saveSync('./trained.xml');
}else {
console.log('Not enough images uploaded yet', cvImages)
}
}
function predictIt(fr, f){
cv.readImage(f, function (err, im) {
let result = fr.predictSync(im);
console.log(`recognize result:(${f}) id=${result.id} conf=${100.0-result.confidence}`);
});
}
//using defaults: .createLBPHFaceRecognizer(radius=1, neighbors=8, grid_x=8, grid_y=8, threshold=80)
const fr = new cv.FaceRecognizer();
trainIt(fr);
forEachFileInDir('./_bench', (f) => predictIt(fr, f));
```
## Test
Using [tape](https://github.com/substack/tape). Run with command:
`npm test`.
## Contributing
I (@peterbraden) don't spend much time maintaining this library, it runs
primarily on contributor support. I'm happy to accept most PR's if the tests run
green, all new functionality is tested, and there are no objections in the PR.
Because I haven't got much time for maintenance, I'd prefer to keep an absolute
minimum of dependencies.
## MIT License
The library is distributed under the MIT License - if for some reason that
doesn't work for you please get in touch.
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
Node.js的OpenCV绑定使开发者能够在JavaScript环境中利用强大的计算机视觉功能。OpenCV(Open Source Computer Vision Library)是一个广泛使用的开源计算机视觉和机器学习软件库。通过Node.js的OpenCV绑定,开发者可以在JavaScript中调用OpenCV的函数,实现复杂的图像处理和计算机视觉任务。 ### node-opencv的功能和优势 **1. 实时视觉处理:** node-opencv允许开发者在Node.js中直接使用OpenCV的强大功能,从而实现实时图像和视频处理。这在需要快速处理大量图像数据的应用中尤为重要,比如视频监控、实时人脸识别和动态对象跟踪等。 **2. 跨平台支持:** Node.js和OpenCV都是跨平台的,结合两者的node-opencv同样支持在不同操作系统上运行,包括Windows、macOS和Linux。这为开发者提供了极大的灵活性,可以在各种硬件和软件环境中部署计算机视觉应用。 **3. 丰富的应用场景:** node-opencv可以应用于各种场景。例如,在无
资源推荐
资源详情
资源评论
收起资源包目录
Node.js 的 OpenCV 绑定 (134个子文件)
Matrix.cc 114KB
Calib3D.cc 18KB
Contours.cc 15KB
FaceRecognizer.cc 14KB
BackgroundSubtractor.cc 14KB
Stereo.cc 13KB
OpenCV.cc 11KB
VideoCaptureWrap.cc 8KB
ImgProc.cc 7KB
CamShift.cc 6KB
Histogram.cc 5KB
CascadeClassifierWrap.cc 5KB
VideoWriterWrap.cc 5KB
Features2d.cc 3KB
Constants.cc 3KB
HighGUI.cc 3KB
LDAWrap.cc 3KB
Point.cc 2KB
init.cc 2KB
nativemat.cc 802B
CONTRIBUTORS 2KB
Dockerfile-ubuntu-14-04 546B
.editorconfig 542B
.gitignore 138B
binding.gyp 4KB
Matrix.h 4KB
OpenCV.h 2KB
Stereo.h 1KB
VideoCaptureWrap.h 971B
BackgroundSubtractor.h 916B
FaceRecognizer.h 872B
Calib3D.h 692B
Matrix.h 628B
Contours.h 628B
CascadeClassifierWrap.h 617B
VideoWriterWrap.h 495B
Point.h 466B
ImgProc.h 450B
CamShift.h 432B
HighGUI.h 419B
Features2d.h 388B
LDAWrap.h 372B
Histogram.h 291B
Constants.h 116B
index.html 314B
car2.jpg 992KB
car1.jpg 270KB
shapes.jpg 116KB
quads.jpg 111KB
car1_template.jpg 22KB
coin2.jpg 13KB
coin1.jpg 9KB
memory.js 31KB
unit.js 16KB
opencv.js 7KB
emd.js 5KB
readimage.js 4KB
find-opencv.js 3KB
bgsubtractor.js 3KB
calc-hist.js 2KB
optical-flow.js 2KB
contours.js 1KB
quad-crosses.js 1KB
detect-shapes.js 1KB
write-video.js 1KB
face-proxy.js 1KB
async-resize.js 1006B
matrix-ref-count.js 959B
take-face-pics.js 893B
remove-lines.js 735B
motion-track.js 690B
smoketest.js 675B
face-detection-rectangle.js 664B
mat-normalize.js 631B
warp-image.js 611B
car-detection.js 594B
face-detection.js 593B
mat-dct.js 573B
salt.js 554B
convert-image.js 537B
include_dirs.js 533B
mat-array-conversion.js 522B
examples.js 508B
dissimilarity.js 486B
camera.js 450B
color-filter.js 439B
addweighted.js 421B
mat-put.js 386B
test.js 161B
bindings.js 58B
package-lock.json 19KB
package.json 673B
Makefile 409B
README.md 7KB
CHANGELOG.md 5KB
bug_report.md 611B
feature_request.md 595B
motion.mov 446KB
opencv_x64.pc 848B
opencv_x86.pc 846B
共 134 条
- 1
- 2
资源评论
编程资源宝库
- 粉丝: 2942
- 资源: 155
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 基于STC12C5A60S2单片机+LCD12864屏实现贪吃蛇源码程序软件源码KEIL C51工程文件.zip
- Java资源 javaeasycms-v2.0.zip
- 基于Qt和opencv图像格式处理工具源代码
- tomcat安装及配置教程.zip
- python,爬取电商平台手机评论并保存为excel,用python进行数据分析并展示图片
- matlab对直接序列扩频和直接序列码分多址进行仿真实验源代码
- 六一儿童节祝福网页源代码
- 端午节活动吃豆人游戏源代码
- python爬虫案例findtrip-master.zip
- 对要使用到的开源组件进行组合整理, 搭建一个简单的框架,方便后续的开发, 其中包括MVP
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功