use github flavored markdown for javascript and bash
Esse commit está contido em:
+101
-79
@@ -13,31 +13,31 @@ You'll need OpenCV 2.3.1 installed.
|
|||||||
|
|
||||||
Then:
|
Then:
|
||||||
|
|
||||||
|
```bash
|
||||||
npm install opencv
|
$ npm install opencv
|
||||||
|
```
|
||||||
|
|
||||||
Or to build the repo:
|
Or to build the repo:
|
||||||
|
|
||||||
|
```bash
|
||||||
node-gyp rebuild
|
$ node-gyp rebuild
|
||||||
|
```
|
||||||
|
|
||||||
## Examples
|
## Examples
|
||||||
|
|
||||||
### Face Detection
|
### Face Detection
|
||||||
|
|
||||||
|
```javascript
|
||||||
cv.readImage("./examples/test.jpg", function(err, im){
|
cv.readImage("./examples/test.jpg", function(err, im){
|
||||||
im.detectObject(cv.FACE_CASCADE, {}, function(err, faces){
|
im.detectObject(cv.FACE_CASCADE, {}, function(err, faces){
|
||||||
for (var i=0;i<faces.length; i++){
|
for (var i=0;i<faces.length; i++){
|
||||||
var x = faces[i]
|
var x = faces[i]
|
||||||
im.ellipse(x.x + x.width/2, x.y + x.height/2, x.width/2, x.height/2);
|
im.ellipse(x.x + x.width/2, x.y + x.height/2, x.width/2, x.height/2);
|
||||||
}
|
}
|
||||||
im.save('./out.jpg');
|
im.save('./out.jpg');
|
||||||
});
|
});
|
||||||
})
|
})
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
## API Documentation
|
## API Documentation
|
||||||
@@ -49,42 +49,52 @@ base datastructure in OpenCV. Things like images are just matrices of pixels.
|
|||||||
|
|
||||||
#### Creation
|
#### Creation
|
||||||
|
|
||||||
new Matrix(rows, cols)
|
```javascript
|
||||||
|
new Matrix(rows, cols)
|
||||||
|
```
|
||||||
|
|
||||||
Or if you're thinking of a Matrix as an image:
|
Or if you're thinking of a Matrix as an image:
|
||||||
|
|
||||||
new Matrix(height, width)
|
```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.
|
Or you can use opencv to read in image files. Supported formats are in the OpenCV docs, but jpgs etc are supported.
|
||||||
|
|
||||||
cv.readImage(filename, function(mat){
|
```javascript
|
||||||
...
|
cv.readImage(filename, function(mat){
|
||||||
})
|
...
|
||||||
|
})
|
||||||
|
|
||||||
cv.readImage(buffer, function(mat){
|
cv.readImage(buffer, function(mat){
|
||||||
...
|
...
|
||||||
})
|
})
|
||||||
|
```
|
||||||
|
|
||||||
If you need to pipe data into an image, you can use an ImageDataStream:
|
If you need to pipe data into an image, you can use an ImageDataStream:
|
||||||
|
|
||||||
var s = new cv.ImageDataStream()
|
```javascript
|
||||||
|
var s = new cv.ImageDataStream()
|
||||||
|
|
||||||
s.on('load', function(matrix){
|
s.on('load', function(matrix){
|
||||||
...
|
...
|
||||||
})
|
})
|
||||||
|
|
||||||
fs.createReadStream('./examples/test.jpg').pipe(s);
|
fs.createReadStream('./examples/test.jpg').pipe(s);
|
||||||
|
```
|
||||||
|
|
||||||
If however, you have a series of images, and you wish to stream them into a
|
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:
|
stream of Matrices, you can use an ImageStream. Thus:
|
||||||
|
|
||||||
var s = new cv.ImageStream()
|
```javascript
|
||||||
|
var s = new cv.ImageStream()
|
||||||
|
|
||||||
s.on('data', function(matrix){
|
s.on('data', function(matrix){
|
||||||
...
|
...
|
||||||
})
|
})
|
||||||
|
|
||||||
ardrone.createPngStream().pipe(s);
|
ardrone.createPngStream().pipe(s);
|
||||||
|
```
|
||||||
|
|
||||||
Note: Each 'data' event into the ImageStream should be a complete image buffer.
|
Note: Each 'data' event into the ImageStream should be a complete image buffer.
|
||||||
|
|
||||||
@@ -92,36 +102,42 @@ Note: Each 'data' event into the ImageStream should be a complete image buffer.
|
|||||||
|
|
||||||
#### Accessing Data
|
#### Accessing Data
|
||||||
|
|
||||||
var mat = new cv.Matrix.Eye(4,4); // Create identity matrix
|
```javascript
|
||||||
|
var mat = new cv.Matrix.Eye(4,4); // Create identity matrix
|
||||||
|
|
||||||
mat.get(0,0) // 1
|
mat.get(0,0) // 1
|
||||||
|
|
||||||
mat.row(0) // [1,0,0,0]
|
|
||||||
mat.col(4) // [0,0,0,1]
|
|
||||||
|
|
||||||
|
mat.row(0) // [1,0,0,0]
|
||||||
|
mat.col(4) // [0,0,0,1]
|
||||||
|
```
|
||||||
|
|
||||||
##### Save
|
##### Save
|
||||||
|
|
||||||
mat.save('./pic.jpg')
|
```javascript
|
||||||
|
mat.save('./pic.jpg')
|
||||||
|
```
|
||||||
|
|
||||||
or:
|
or:
|
||||||
|
|
||||||
var buff = mat.toBuffer()
|
```javascript
|
||||||
|
var buff = mat.toBuffer()
|
||||||
|
```
|
||||||
|
|
||||||
#### Image Processing
|
#### Image Processing
|
||||||
|
|
||||||
im.convertGrayscale()
|
```javascript
|
||||||
im.canny(5, 300)
|
im.convertGrayscale()
|
||||||
im.houghLinesP()
|
im.canny(5, 300)
|
||||||
|
im.houghLinesP()
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
#### Simple Drawing
|
#### Simple Drawing
|
||||||
|
|
||||||
im.ellipse(x, y)
|
```javascript
|
||||||
im.line([x1,y1], [x2, y2])
|
im.ellipse(x, y)
|
||||||
|
im.line([x1,y1], [x2, y2])
|
||||||
|
```
|
||||||
|
|
||||||
#### Object Detection
|
#### Object Detection
|
||||||
|
|
||||||
@@ -129,21 +145,25 @@ There is a shortcut method for
|
|||||||
[Viola-Jones Haar Cascade](http://www.cognotics.com/opencv/servo_2007_series/part_2/sidebar.html) object
|
[Viola-Jones Haar Cascade](http://www.cognotics.com/opencv/servo_2007_series/part_2/sidebar.html) object
|
||||||
detection. This can be used for face detection etc.
|
detection. This can be used for face detection etc.
|
||||||
|
|
||||||
|
```javascript
|
||||||
mat.detectObject(haar_cascade_xml, opts, function(err, matches){})
|
mat.detectObject(haar_cascade_xml, opts, function(err, matches){})
|
||||||
|
```
|
||||||
|
|
||||||
For convenience in face recognition, cv.FACE_CASCADE is a cascade that can be used for frontal face recognition.
|
For convenience in face recognition, cv.FACE_CASCADE is a cascade that can be used for frontal face recognition.
|
||||||
|
|
||||||
Also:
|
Also:
|
||||||
|
|
||||||
mat.goodFeaturesToTrack
|
```javascript
|
||||||
|
mat.goodFeaturesToTrack
|
||||||
|
```
|
||||||
|
|
||||||
#### Contours
|
#### Contours
|
||||||
|
|
||||||
mat.findCountours
|
```javascript
|
||||||
mat.drawContour
|
mat.findCountours
|
||||||
mat.drawAllContours
|
mat.drawContour
|
||||||
|
mat.drawAllContours
|
||||||
|
```
|
||||||
|
|
||||||
### Using Contours
|
### Using Contours
|
||||||
|
|
||||||
@@ -151,33 +171,35 @@ Also:
|
|||||||
functions for accessing, computing with, and altering the contours contained in it.
|
functions for accessing, computing with, and altering the contours contained in it.
|
||||||
See [relevant source code](src/Contours.cc) and [examples](examples/)
|
See [relevant source code](src/Contours.cc) and [examples](examples/)
|
||||||
|
|
||||||
var contours = im.findContours;
|
```javascript
|
||||||
|
var contours = im.findContours;
|
||||||
|
|
||||||
# Count of contours in the Contours object
|
# Count of contours in the Contours object
|
||||||
contours.size();
|
contours.size();
|
||||||
|
|
||||||
# Count of corners(verticies) of contour `index`
|
# Count of corners(verticies) of contour `index`
|
||||||
contours.cornerCount(index);
|
contours.cornerCount(index);
|
||||||
|
|
||||||
# Access vertex data of contours
|
# Access vertex data of contours
|
||||||
for(var c = 0; c < contours.size(); ++c) {
|
for(var c = 0; c < contours.size(); ++c) {
|
||||||
console.log("Contour " + c);
|
console.log("Contour " + c);
|
||||||
for(var i = 0; i < contours.cornerCount(c); ++i) {
|
for(var i = 0; i < contours.cornerCount(c); ++i) {
|
||||||
var point = contours.point(c, i);
|
var point = contours.point(c, i);
|
||||||
console.log("(" + point.x + "," + point.y + ")");"
|
console.log("(" + point.x + "," + point.y + ")");"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
# Computations of contour `index`
|
# Computations of contour `index`
|
||||||
contours.area(index);
|
contours.area(index);
|
||||||
contours.arcLength(index, isClosed);
|
contours.arcLength(index, isClosed);
|
||||||
contours.boundingRect(index);
|
contours.boundingRect(index);
|
||||||
contours.minAreaRect(index);
|
contours.minAreaRect(index);
|
||||||
contours.isConvex(index);
|
contours.isConvex(index);
|
||||||
|
|
||||||
# Destructively alter contour `index`
|
# Destructively alter contour `index`
|
||||||
contours.approxPolyDP(index, epsilon, isClosed);
|
contours.approxPolyDP(index, epsilon, isClosed);
|
||||||
contours.convexHull(index, clockwise);
|
contours.convexHull(index, clockwise);
|
||||||
|
```
|
||||||
|
|
||||||
## MIT License
|
## MIT License
|
||||||
The library is distributed under the MIT License - if for some reason that
|
The library is distributed under the MIT License - if for some reason that
|
||||||
|
|||||||
Referência em uma Nova Issue
Bloquear um usuário