js 显示tfjs输出的图像矩阵

原文链接: js 显示tfjs输出的图像矩阵

上一篇: js 显示矩阵形式的图片

下一篇: sklearn video 视频处理 对比opencv

使用js原生方法将tfjs输出的矩阵转化为图像显示在canvas中

12bd3eddf53c8dcfb1ccad93eb824fbf9ea.jpg

class Mat {
  constructor(__row, __col, __data) {
    this.row = __row || 0;
    this.col = __col || 0;
    this.channel = 4;
    this.buffer = new ArrayBuffer(__row * __col * this.channel);
    this.data = new Uint8ClampedArray(this.buffer);
    this.data.set(__data);
    this.type = "CV_RGBA";
  }
}


function imread(__image) {
  let width = __image.width
  let height = __image.height;
  console.log(width, height)
  let canvas = document.createElement('canvas')
  canvas.height = height
  canvas.width = width
  let ctx = canvas.getContext("2d");
  ctx.drawImage(__image, 0, 0);
  let data = ctx.getImageData(0, 0, width, height).data
  console.log(data)
  return new Mat(height, width, data);;
}

function RGBA2ImageData(__imgMat) {
  let width = __imgMat.col
  let height = __imgMat.row
  console.log(width, height)
  let canvas = document.createElement('canvas')
  canvas.height = height
  canvas.width = width
  let ctx = canvas.getContext("2d");
  let imageData = ctx.createImageData(width, height);
  imageData.data.set(__imgMat.data);
  return imageData;
}

export {
  Mat,
  RGBA2ImageData,
  imread,
}

tfjs显示

let canvas = document.getElementById("mix");
tf.browser.toPixels(ret, canvas)

js显示

由于只能显示rgba格式的图像,所以使用tf在channel上加了一层全为255的通道

ret = ret.squeeze(0)
console.log('ret', ret)
ret = ret.clipByValue(0, 255).toInt()
let [h, w, c] = ret.shape
console.log('ret', ret) // (h,w,c)
let a = tf.fill([h, w, 1], 255)
console.log('a', a)
let rgba = tf.concat([ret, a], 2)
console.log('rgba', rgba)
// let data = rgba.flatten().dataSync()
let data = rgba.flatten().arraySync()
console.log(data.length, data[0])
console.log(data)

let canvas = document.getElementById("mix");
// 显示
let mat = new util.Mat(h, w, data)
let img_data = util.RGBA2ImageData(mat)
canvas.height = h
canvas.width = w
let ctx = canvas.getContext("2d")
ctx.putImageData(img_data, 0, 0, 0, 0, w, h)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值