compare 2 images considering into translation
npm install x-img-diff-jsJavaScript(Web Assembly) porting project for Quramy/x-img-diff, which extracts structual information of a bit different 2 images.
``sh`
npm install x-img-diff-js pngjs
`javascript
const fs = require('fs');
const PNG = require('pngjs').PNG;
const detectDiff = require('x-img-diff-js');
function decodePng(filename) {
return new Promise((resolve, reject) => {
fs.readFile(filename, (err, buffer) => {
if (err) return reject(err);
resolve(PNG.sync.read(buffer));
});
});
}
async function main() {
const [img1, img2] = await Promise.all([
decodePng('demo/img/actual.png')),
decodePng('demo/img/expected.png')),
]);
const diffResult = await detectDiff(img1, img2);
console.log("diff result:", diffResult);
console.log("the number of matching area:", diffResult.matches.length);
console.log("img1's macthing area bounding rect:", diffResult.matches[0][0].bounding);
console.log("img2's matching area bounding rect:", diffResult.matches[0][1].bounding);
console.log("diff marker rectangulars in img1's matching area", diffResult.matches[0][0].diffMarkers.length);
}
main();
`
`ts`
detectDiff(img1: Image, img2: Image, opt?: DetectDiffOptions): Promise
- img1, img2 - Required - Input images.opt
- - Optional - An object to configure detection.
`ts`
type Image = {
width: number;
height: number;
data: Uint8Array;
}
`ts`
type DetectDiffResult = {
matces: MatchingRegions[];
strayingRects: Rect[][];
}
- matces - An array of each matching region.strayingRects
- - An array of keypoints recatangle. strayingRects[0] corresponds to img1, strayingRects[1] does to img2.
`ts`
type MatchingRegions = {
bounding: Rect;
center: Rect;
diffMarkers: Rect[];
}[];
- bounding - Bounding rectangle of this region.center
- - Center rectangle of this region.diffMarkers
- - An array of different parts.
A MatchingRegions is a couple of objects. The 1st corresponds to img1, and 2nd does to img2.center
And you can get how far the region moved using property.
`ts`
// m is an item of DetectDiffResult#mathes
const translationVector = {
x: m[1].center.x - m[0].center.x,
y: m[1].center.y - m[0].center.y,
};
`ts`
type Rect = {
x: number;
y: number;
width: number;
height: number;
}
Represents a rectangle.
`ts`
detectDiff.getBrowserJsPath(): string
Returns the absolute path of the JavaScript file which should be loaded in Browser env.
`ts`
detectDiff.getBrowserWasmPath(): string
Returns the absolute path of the Web Assembly(.wasm) file which should be loaded in Browser env.
1. Clone this repo and change the current directory to it.
2. Get OpenCV source code
``
git clone https://github.com/opencv/opencv.git
cd opencv
git checkout 3.1.0
cd ..
3. Get x-img-diff source code
``
git clone https://github.com/quramy/x-img-diff.git
4. Execute docker
`sh`
$ docker-compose build
$ docker-compose run emcc
```
python -mhttp.server
open http://localhost:8000/index.html