<div></div>
<div></div>
div {
  height: calc(50% - 4px);
  overflow: hidden;
}
div + div {
  margin-top: 8px;
}
canvas {
  width: 100%;
}
html, body {
  height: 100%;
  box-sizing: border-box;
}
body {
  margin: 0;
  padding: 8px;
}
// https://gammacv.com
const imgURL = 'https://source.unsplash.com/random/500x400?random=' + Math.random();
const width = 500;
const height = 400;

// load image from URL or base64 string and store a result in input tensor
gm.imageTensorFromURL(imgURL, 'uint8', [height, width, 4], true).then((input) => {
  // the input is already a valid operation that can be chained
  // notice the use of 'let'. We are going to reuse the pipeline variable
  let pipeline = input

  // operations always return a valid input for another operation.
  // if you are a functional programmer, you could easily compose these.
  pipeline = gm.grayscale(pipeline);
  pipeline = gm.gaussianBlur(pipeline, 3, 3);
  pipeline = gm.sobelOperator(pipeline);
  pipeline = gm.cannyEdges(pipeline, 0.25, 0.75);

  // allocate output tensor
  const output = gm.tensorFrom(pipeline);
  const sess = new gm.Session();

  sess.init(pipeline);

  // run your operation
  sess.runOp(pipeline, 0, output);

  // display your output
  const canvasOriginal = gm.canvasCreate(width, height);
  const canvasProcessed = gm.canvasCreate(width, height);

  document.body.children[0].appendChild(canvasProcessed);
  document.body.children[1].appendChild(canvasOriginal);
  gm.canvasFromTensor(canvasOriginal, input);
  gm.canvasFromTensor(canvasProcessed, output);
});

External CSS

This Pen doesn't use any external CSS resources.

External JavaScript

  1. https://github.com/PeculiarVentures/GammaCV/releases/download/v0.3.6/index.min.js