tfjs 配合opencvjs 读取网页图像并显示

原文链接: tfjs 配合opencvjs 读取网页图像并显示

上一篇: fast style transfer 快速风格转换 tfjs

下一篇: canvas 绘制图像

下载文件

opencv.js

tf.js

https://download.csdn.net/download/qq_35516360/10981194

https://download.csdn.net/download/qq_35516360/10981197

效果,第一张是网页上的图片,使用tf读取为tensor后,再转化为数组,经过opencv包装后显示到canvas中

第三张图片是opencv读取第二个canvas内容然后显示到第三个canvas中

938d77cfc8bdf7a990436a6cb171f92b684.jpg

数据类型

Data Properties C++ Type JavaScript Typed Array Mat Type
data uchar Uint8Array CV_8U
data8S char Int8Array CV_8S
data16U ushort Uint16Array CV_16U
data16S short Int16Array CV_16S
data32S int Int32Array CV_32S
data32F float Float32Array CV_32F
data64F double Float64Array CV_64F

8uc1表示uint8类型1通道,8uc3表示一般的rgb三通道

    mat = cv.matFromArray(2, 2, cv.CV_8UC1, [1, 2, 3, 4]);
  function onOpenCvReady() {
    // 获取img对象
    let img = document.getElementById('img')
    document.getElementById('status').innerHTML = 'OpenCV.js is ready.';
    console.log(cv)
    mat = cv.matFromArray(2, 2, cv.CV_8UC1, [1, 2, 3, 4]);
    console.log(mat)
    console.log(tf)
    // img.onload = function () {

    //使用tf读取img,将图片转化为矩阵格式
    tensor = tf.browser.fromPixels(img).toFloat()
    let [h, w, c] = tensor.shape
    tensor = tensor.flatten()
    console.log(tensor.shape, h, w, c)
    console.log(tensor)
    // 获取tensor中的数据
    data = tensor.dataSync()
    console.log(data.length)
    // 使用opencv将数组转换为hwc格式的矩阵
    mat = cv.matFromArray(h, w, cv.CV_8UC3, data);
    console.log(mat)
    //显示到canvas中
    cv.imshow('canvasOutput', mat);

    // 读取canvas中的数据,并将显示在另一个canvas中
    canvas = document.getElementById('canvasOutput')
    ctx = canvas.getContext("2d");
    imgData = ctx.getImageData(0, 0, canvas.width, canvas.height);
    mat = cv.matFromImageData(imgData);
    cv.imshow('canvasOutput2', mat);

  }

完整代码

引入js的方式及其奇怪,而且不按照这个来根本无法引入!

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <title>Hello OpenCV.js</title>
  <style>
    .img {
      max-height: 600px;
      max-width: 600px;
    }
  </style>
  <script async type="text/javascript" src="opencv.js" onload="onOpenCvReady()"></script>
  <script type="text/javascript" src="tf.js"></script>
</head>
<body>
<p id="status">OpenCV.js is loading...</p>
<div>
  <img src="./default.jpg" id="img" class="img">
  <canvas id="canvasOutput"></canvas>
  <canvas id="canvasOutput2"></canvas>
</div>
<script type="text/javascript">
  function onOpenCvReady() {
    let img = document.getElementById('img')
    document.getElementById('status').innerHTML = 'OpenCV.js is ready.';
    console.log(cv)
    mat = cv.matFromArray(2, 2, cv.CV_8UC1, [1, 2, 3, 4]);
    console.log(mat)
    console.log(tf)
    // img.onload = function () {
    tensor = tf.browser.fromPixels(img).toFloat()
    let [h, w, c] = tensor.shape
    tensor = tensor.flatten()
    console.log(tensor.shape, h, w, c)
    console.log(tensor)
    data = tensor.dataSync()
    console.log(data.length)
    mat = cv.matFromArray(h, w, cv.CV_8UC3, data);
    console.log(mat)
    cv.imshow('canvasOutput', mat);
    canvas = document.getElementById('canvasOutput')

    ctx = canvas.getContext("2d");
    imgData = ctx.getImageData(0, 0, canvas.width, canvas.height);
    mat = cv.matFromImageData(imgData);
    cv.imshow('canvasOutput2', mat);

  }

  // window.onload = function () {
  //
  //   console.log(cv)
  //   console.log(tf)
  // }
</script>
<!--<script async type="text/javascript" src="opencv.js" onload="onOpenCvReady()"/>-->
<!--<script type="text/javascript" src="tf.js"/>-->

</body>


</html>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值